gpt4 book ai didi

C# Networkstream 什么都不读

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:14 27 4
gpt4 key购买 nike

只是尝试使用 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 不包含任何内容......有帮助吗?

最佳答案

在客户端 stream 位于流的最后。因此,CopyTo 没有要复制的内容。

在复制之前使用stream.Position = 0;

此外,您似乎没有意识到套接字读取(实际上是任何流读取)返回的字节数可能少于请求的字节数(至少一个)。您的阅读代码必须考虑到这一点。 TCP 不保留消息边界。

关于C# Networkstream 什么都不读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226972/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com