0

Windows 2k8のvs2010のlocalhostでTCPサーバーを稼働させています。

vs2010 を使用して 127.0.0.1 でクライアントを接続すると、tcp サーバーがコマンド ライン プロトコル ハンドラーを実行するため、サーバーは呼び出しを取得します (デバッグから確認できます)。キーですが、応答ストリームを読み取るときにクライアントでブロックします。

同じポートのループバックで Telnet を使用し、同じコマンド シーケンスを送信すると、応答、つまりセッション キーが即座に受信されます。

クライアントコードは次のとおりです。

EndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9121);
sing (Socket socket = new Socket(serverAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
            {

                socket.Connect(serverAddress);

                var socketStream = new NetworkStream(socket);
                var reader = new StreamReader(socketStream, Encoding.ASCII, false);
                var writer = new StreamWriter(socketStream, Encoding.ASCII, 1024);

                string charSource = Guid.NewGuid().ToString().Replace("-", string.Empty)
                   + Guid.NewGuid().ToString().Replace("-", string.Empty)
                   + Guid.NewGuid().ToString().Replace("-", string.Empty);

                Random rd = new Random();


                int startPos = rd.Next(0, charSource.Length - 2);
                int endPos = rd.Next(startPos + 1, charSource.Length - 1);

                var currentMessage = charSource.Substring(startPos, endPos - startPos + 1);

                Console.WriteLine("Sent Command");

                writer.Write("HEAR {0} {1}", currentMessage.Length.ToString().PadLeft(4, '0'), currentMessage);
                writer.Flush();

                Console.WriteLine("Reading Command Results");
                var line = reader.ReadLine();
                Console.WriteLine("Received: " + line);
            }

ボブ

4

2 に答える 2

3

これを機能させるには、以下のコードに示すように、Write を WriteLine で変更してください。

 Console.WriteLine("Sent Command");

 writer.WriteLine("HEAR {0} {1}", currentMessage.Length.ToString().PadLeft(4, '0'), currentMessage);
 writer.Flush();
于 2012-02-29T02:20:02.037 に答える
2

ネットワーク トレースを有効にすると、データが送信されていることを確認できます。おそらくそうなので、呼び出しをリーダーに変更します。メッセージの終わりを見つけるまで読んで読んでください。

于 2012-03-01T21:56:03.410 に答える