只是尝试使用Networkstream,这是一个我写的简单代码:
客户方:
TcpClient c = new TcpClient();
c.Connect("10.0.0.4", 10);
NetworkStream ns = c.GetStream();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes("first");
byte[] buffer2 = System.Text.Encoding.UTF8.GetBytes("second");
MemoryStream stream = new MemoryStream();
stream.Write(buffer, 0, buffer.Length);
stream.Write(buffer2, 0, buffer2.Length);
stream.CopyTo(ns);
这是服务器端:
TcpListener tl = new TcpListener(IPAddress.Any, 10);
tl.Start();
TcpClient c = tl.AcceptTcpClient();
NetworkStream ns = new NetworkStream(c.Client);
byte[] buff = new byte[5];
ns.Read(buff,0,buff.Length);
string result = System.Text.Encoding.UTF8.GetString(buff);
MessageBox.Show(result);
只有当我关闭整个应用程序时才会执行MessageBox
行,并且我总是会收到一个空白的消息框!这意味着result
并不包含任何内容......
有什么帮助吗?
答案 0 :(得分:2)
客户端stream
位于流的最末端。因此,CopyTo
无需复制任何内容。
复制前使用stream.Position = 0;
。
此外,您似乎并未意识到套接字读取(实际上是任何流读取)可以返回比请求的字节数少的字节(至少一个)。您的阅读代码必须考虑到这一点。 TCP不保留消息边界。