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

要使这项工作正常进行,请使用 WriteLine 更改 Write,如下面的代码所示:

 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

启用网络跟踪,这样您就可以确定数据正在到来。可能是这样,所以将您的呼叫更改为 reader。阅读并阅读,直到找到消息的结尾。

于 2012-03-01T21:56:03.410 回答