-1

こんにちは、単純なサーバー/クライアントで作業していましたが、1 つのコマンド (クライアント/サーバー) で 2 つのメッセージを続けて入力できないという問題があったため、送信/受信コマンドでタイマーを作成しましたが、開始時に同じ秒で止まる

これがサーバーのコードです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Timers;

    namespace Server
    {
        class Program
        {
            //--------------------------------------------------------------------------------------------
            static TcpClient connected;
            //--------------------------------------------------------------------------------------------
            static void Main(string[] args)
            {
                TcpListener listener = new TcpListener(IPAddress.Any, 1980);

                listener.Start();
                connected = listener.AcceptTcpClient();

                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Elapsed += new ElapsedEventHandler(timerTick);
                timer.Interval = 100;

                Thread.Sleep(1000);
                timer.Enabled = true;
            }
            //--------------------------------------------------------------------------------------------
            static byte[] buffer = new byte[4096];
            //--------------------------------------------------------------------------------------------
            static void send()
            {

                NetworkStream stream = connected.GetStream();
                byte[] data = Encoding.ASCII.GetBytes(Console.ReadLine());
                stream.Write(data, 0, data.Length);
                send();
            }
            //--------------------------------------------------------------------------------------------
            public static void timerTick(object source, ElapsedEventArgs e)
            {
                    receive();

            }
            //--------------------------------------------------------------------------------------------
            static void sendCP()
            {

                NetworkStream stream = connected.GetStream();
                byte[] data = Encoding.ASCII.GetBytes("Connected To Server");
                stream.Write(data, 0, data.Length);

            }



            static void receive()
            {
                NetworkStream stream = connected.GetStream();
                int data = stream.Read(buffer, 0, 4096);
                string rec = Encoding.ASCII.GetString(buffer, 0, data);

                Console.WriteLine("Client: " + Encoding.ASCII.GetString(buffer, 0, data));
                for (; ; ) { }
            }
        }
    }

これはクライアントのコードです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Timers;
namespace Client
{
    class Program
    {
        static TcpClient client;

        static void Main(string[] args)
        {
          System.Timers.Timer timer = new System.Timers.Timer();
          timer.Elapsed += new ElapsedEventHandler(timerTick);
          timer.Interval = 1000;
          client = new TcpClient();
            client.Connect("127.0.0.1", 1980);
            if (client.Connected)
            {
                sendCP();
                timer.Enabled = true;
            }
        }
        public static void timerTick(object source,ElapsedEventArgs e)
        {
            while (client.Connected)
            {
                receive();
            }
        }
        static byte[] buffer = new byte[4096];
        static void send()
        {

            NetworkStream stream = client.GetStream();
            byte[] data = Encoding.ASCII.GetBytes(Console.ReadLine());
            stream.Write(data, 0, data.Length);
            send();
        }
        static void sendCP()
        {

            NetworkStream stream = client.GetStream();
            byte[] data = Encoding.ASCII.GetBytes("Connected To Client");
            stream.Write(data, 0, data.Length);
        }
        static void receive()
        {
            NetworkStream stream = client.GetStream();
            int data = stream.Read(buffer, 0, 4096);
            string rec = Encoding.ASCII.GetString(buffer, 0, data);
            Console.WriteLine("Server: " + Encoding.ASCII.GetString(buffer, 0, data));
        }
    }
}

誰かが私を助けてくれることを願って、ありがとう!

4

1 に答える 1

1

タイマーを作成しましたが、決して開始しません。プログラムは開始後に終了します。コードにはさらに多くのエラーがあり、スケジュールされた操作とイベント駆動型の操作が混在しています。1000ミリ秒ごとに何かを送信しようとしますが、Console.ReadLine()を待機しています

于 2012-07-29T13:40:03.407 に答える