在Windows 2k8上,我在vs2010上的localhost上启动并运行了TCP服务器。
当我使用vs2010连接127.0.0.1上的客户端时,服务器接到电话,(我可以看到它 来自debug)因为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);
}
鲍勃
答案 0 :(得分:3)
要使其工作,请使用WriteLine更改Write,如下面的代码所示:
Console.WriteLine("Sent Command");
writer.WriteLine("HEAR {0} {1}", currentMessage.Length.ToString().PadLeft(4, '0'), currentMessage);
writer.Flush();
答案 1 :(得分:2)
Enable network tracing,因此您可以确定数据即将发布。它可能是,所以改变你对reader的调用。阅读并阅读,直到你找到消息的结尾。