【发布时间】: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