C#Networkstream什么都没读

时间:2015-08-26 12:41:35

标签: c# sockets networking

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

1 个答案:

答案 0 :(得分:2)

客户端stream位于流的最末端。因此,CopyTo无需复制任何内容。

复制前使用stream.Position = 0;

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