0

tcp ヘッダー パケットでは、パケットの合計サイズを示すフィールドです。次の方法で複数のクライアントをリッスンしているサーバーを実装しました

int numberOfClientsYouNeedToConnect = int.Parse(Console.ReadLine());
        for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
        {
            Thread newThread = new Thread(new ThreadStart(Listeners));
            newThread.Start();
        }

public static void Listeners()
    {
        try
        {
            Socket socketForClient = tcpListener.AcceptSocket();

            if (socketForClient.Connected)
            {
                Console.WriteLine("Client : " + socketForClient.RemoteEndPoint + " is now connected to server.");
                NetworkStream networkStream = new NetworkStream(socketForClient);
                //networkStream.ReadTimeout = 30;
                System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
                System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);

                while (true)
                {
                    string theString = streamReader.ReadLine();
                    //Console.WriteLine(theString);
                    byte[] input_stream = extra_function.ConvertHexToString(theString);
                    for (int i = 0; i < input_stream.Length; i++)
                    {
                       // Console.WriteLine("hi");
                        Console.Write(input_stream[i]);
                    }


                    if (theString != "exit")
                    {
                        // original message from client
                        Console.WriteLine("------------------------------------------------------------------------------");
                        Console.WriteLine("Message recieved from client(" + socketForClient.RemoteEndPoint + ") : " + theString);

                        // ASCII code for the message from client 
                        Console.Write("ASCII Code for message is : ");
                        foreach (char c in theString)
                        {
                            Console.Write(System.Convert.ToInt32(c) + " ");
                        }
                    }
                 }

しかし、私の問題は、完全なパケットを受信せずにサーバーが処理を開始し、パケットの他の部分が少し遅れて来ることです。サーバーが完全なパケットを受信して​​処理するようにコードを変更するにはどうすればよいですか。合計パケットのサイズは、パケットのヘッダーに含まれています。サーバーは、クライアントからその量のバイトを受信するまで待つか、完全なパケットを取得するまでしばらく待つ必要があります。

4

1 に答える 1

-1

StreamReader.ReadToEnd()代わりに試しましたStreamReader.ReadLine()か?

于 2013-08-21T11:30:08.517 に答える