【问题标题】:Why data from NetworkStream do not read? .net TcpClient为什么不读取 NetworkStream 中的数据? .net TcpClient
【发布时间】:2020-10-01 01:39:09
【问题描述】:

我有客户端层和服务器层。客户端发送转换为字节数组整数变量。 我正在使用 TcpClient 和 TcpListener,并使用 NetworkStream 来写入和读取数据。出于某种原因,服务器不从 NetworkStream 读取数据,尽管我使用了这个问题的建议:How to get all data from NetworkStream

客户层:

   TcpClient sender1 = new TcpClient();
                        sender1.Connect(ip, port);

                        using (NetworkStream stream1 = client.GetStream())
                        {
                            int isCorrect = 1;
                            byte[] data = BitConverter.GetBytes(isCorrect);
                            stream1.Write(data, 0, data.Length);
                        }
                        sender1.Close();

服务器层

  TcpListener server = new TcpListener(IPAddress.Parse(ip), serverPort);
  server.Start();

        while (true)
        {
            TcpClient enterWaiter = server.AcceptTcpClient();
            using (NetworkStream stream1 = enterWaiter.GetStream())
            {
                byte[] buffer = new byte[4];
                using (MemoryStream ms = new MemoryStream())
                {
                    int read;
                    while ((read = stream1.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        ms.Write(buffer, 0, read);
                    }
                    Console.WriteLine($"{ms.ToArray()}");
                }
            }
            server.Stop();
            break;
        }

【问题讨论】:

  • 接受第一个客户端后,您读取数据。但可能还没有数据。所以你只需停止服务器。接受后尝试插入睡眠

标签: c# .net sockets networking tcpclient


【解决方案1】:

这是因为您在接收数据之前关闭服务器,移动或移除Server.Stop并换行,例如:

 TcpListener server = new TcpListener(IPAddress.Parse(ip), serverPort);
  server.Start();

        while (true)
        {
            TcpClient enterWaiter = server.AcceptTcpClient();
            using (NetworkStream stream1 = enterWaiter.GetStream())
            {
                byte[] buffer = new byte[4];
                using (MemoryStream ms = new MemoryStream())
                {
                    int read;
                    while ((read = stream1.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        ms.Write(buffer, 0, read);
                    }
                    Console.WriteLine($"{ms.ToArray()}");
                }
            }
            //server.Stop(); <-- (Re)move
            //break; <-- (Re)move
        }

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2014-03-14
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多