【问题标题】:TCP Client not receiving response on loopbackTCP 客户端在环回时未收到响应
【发布时间】:2012-02-26 00:58:37
【问题描述】:

我在 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);
            }

鲍勃

【问题讨论】:

  • 我们永远无法回答这个问题。但如果您显示相关代码,我们可能会这样做。
  • 您在问题中遗漏了很多信息。可能有十几个变量会导致您缺少响应。我们如何猜测?
  • 是的,我就是这么想的。我会发布客户端代码。
  • 您是否发送了 ReadLine() 正在等待的 cr 和/或 lf?
  • 如果你要读取行,你也需要写行。

标签: c# response tcpserver loopback


【解决方案1】:

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

 Console.WriteLine("Sent Command");

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

【讨论】:

  • 尝试将两者都设置为 WriteLine。客户坐下来等待。当然,flush 会将缓冲区流写入通道。
  • 我下载了 TCPIP builder 并且服务器工作正常。您是否推荐任何示例 .NET TCP/P 套接字客户端。
  • 我使用 TcpClient 类创建了一个客户端,效果很好。服务器正在工作并发送正确的会话响应。
  • 最终解决方案是在会话响应中添加换行符。之后客户端工作正常,发现测试代码通过但错误。谢谢。
【解决方案2】:

Enable network tracing,因此您可以确定数据正在发送。可能是这样,所以将您的调用更改为 reader。阅读并阅读,直到找到消息的结尾。

【讨论】:

  • 谢谢。以前没见过。
猜你喜欢
  • 1970-01-01
  • 2020-08-13
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多