私は単純なTCPクライアントとサーバーを作成しました。問題はクライアントにあります。TcpClientの応答が完全に読み取られるまでのループ
サーバーからの応答全体を読み込むのに問題があります。すべてのデータを送信できるようにスレッドをスリープさせる必要があります。
私はこのコードを、サーバーがデータの送信を完了するまで実行するループに変換するのに数回試行しました。
// Init & connect to client
TcpClient client = new TcpClient();
Console.WriteLine("Connecting.....");
client.Connect("192.168.1.160", 9988);
// Stream string to server
input += "\n";
Stream stm = client.GetStream();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] ba = asen.GetBytes(input);
stm.Write(ba, 0, ba.Length);
// Read response from server.
byte[] buffer = new byte[1024];
System.Threading.Thread.Sleep(1000); // Huh, why do I need to wait?
int bytesRead = stm.Read(buffer, 0, buffer.Length);
response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Response String: "+response);
client.Close();
クライアントは、サーバがいつ終了するかを知るために何らかの方法が必要です(例えば、特別な終了シーケンスの長さプレフィックス) – SLaks
StreamReader http://msdn.microsoft.com/en-us/library/systemを試してみてください。 io.streamreader.aspx – David
StreamReaderはどのように役立ちますか?サーバーがいつ終了するかはわかりません。 –