c# - Stream was not readable是在使用readbinary时引起的

标签 c# sockets binaryreader binarywriter

我试图通过套接字发送一个值。所以我的项目客户端和服务器有两个部分。

客户端使用以下代码向服务器发送一个值:

  NetworkStream networkStream = socketForServer.GetStream();
            System.IO.BinaryWriter binaryWriter =
               new System.IO.BinaryWriter(networkStream);

            //------
            int messageSource = 0;
            int messageDesitination = 0;
            int interlockingId = 0;
            int trackId = 0;
            int trainId = 2;
            int direction = 0;
            int messageType = 0;
            int informationType = 0;
            int dateTime = 0;

foreach (Sensor LeftSensorList in LeftSensor)
                {

                    binaryWriter.Write(messageSource);
                    binaryWriter.Write(messageDesitination);
                    binaryWriter.Write(interlockingId);
                    binaryWriter.Write(trackId);
                    binaryWriter.Write(trainId);
                    binaryWriter.Write(direction);
                    binaryWriter.Write(messageType);
                    binaryWriter.Write(informationType);
                    binaryWriter.Write(dateTime);

                    binaryWriter.Flush();
                    binaryWriter.Close();
                    Thread.Sleep(4000);

                }

在服务器部分我应该读取二进制值:

static void Listeners()
        {

            Socket socketForClient = tcpListener.AcceptSocket();
            if (socketForClient.Connected)
            {

                NetworkStream networkStream = new NetworkStream(socketForClient);

                while (true)
                {                                
                    List<int> variables = new List<int>();
                    using (var reader = new BinaryReader(networkStream))
                    {

                        int messageSource = reader.ReadInt32();
                        int messageDesitination = reader.ReadInt32();
                        int interlockingId = reader.ReadInt32();
                        int trackId = reader.ReadInt32();
                        int trainId = reader.ReadInt32();
                        int direction = reader.ReadInt32();
                        int messageType =reader.ReadInt32();
                        int informationType = reader.ReadInt32();
                        int dateTime = reader.ReadInt32();
                         reader.Close();

                    }
            }
         }

因此,当客户端发送一个值时,我可以第一次在服务器部分获取该值,当客户端向我的服务器发送另一个值时,我收到此错误:

Stream was not readable.

为什么?

最佳答案

您正在关闭循环中的阅读器,这将关闭流。最简单的解决方法是:

  • 将阅读器移到循环外面,或者
  • 根本不使用阅读器(只是与流对话)

但是,如果您需要在循环内使用读取器,您可以使用new BinaryReader(Stream, Encoding, bool) 构造函数重载并传递 true 在最后一个参数中告诉它不要关闭底层 Stream。默认情况下,假定读者将对 Stream 的生命周期负责; leaveOpen 参数改变了这种行为。

关于c# - Stream was not readable是在使用readbinary时引起的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454252/

相关文章:

c# - 是否有一种模式或更简洁的方法来保存具有多个嵌套类的大对象?

java - 数据何时真正通过socket发送?

c# - gzipstream 用于套接字上的仅转发流

c++ - 接受超时的 TCP 连接

c# - 使用BinaryReader/BinaryWriter建立聊天

c# - 是否有任何预制函数可以帮助根据父控件调整控件的大小?

c# - Windows XP 上某些语言的 Treeview 编码问题

c# - 从二进制文件中快速读取结构数组

c# - 动态操作自适应 IInputStream (MPEG-DASH)

c# - 列表中的 OutOfMemoryException