Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用readbinary时导致无法读取超过流结尾的内容_C#_Sockets_Binaryreader_Binarywriter - Fatal编程技术网

C# 使用readbinary时导致无法读取超过流结尾的内容

C# 使用readbinary时导致无法读取超过流结尾的内容,c#,sockets,binaryreader,binarywriter,C#,Sockets,Binaryreader,Binarywriter,我试图通过套接字发送一个值,所以我的项目客户端和服务器中有两个部分 客户端使用以下代码向服务器发送值: NetworkStream networkStream = socketForServer.GetStream(); System.IO.BinaryWriter binaryWriter = new System.IO.BinaryWriter(networkStream); //------

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

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

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)
            {
                Console.WriteLine("Client:" + socketForClient.RemoteEndPoint + " now connected to server.");
                NetworkStream networkStream = new NetworkStream(socketForClient);


                while (true)
                {

                    TimeTableRepository objTimeTableRepository = new TimeTableRepository();
                    SensorRepository objSensorRepository = new SensorRepository();
                    ArrivalTimeRepository objArrivalTimeRepository=new ArrivalTimeRepository();
                    TrainRepository objTrainRepository = new TrainRepository();




                    using (var reader = new BinaryReader(networkStream, Encoding.Default, true))
                    {

                        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();


                    }


                }

                networkStream.Close();



            }
            socketForClient.Close();
            Console.WriteLine("Press any key to exit from server program");
            Console.ReadKey();
        }
因此,当客户端发送一个值时,我可以第一次在服务器部分获取该值,当客户端向我的服务器发送另一个值时,我得到以下错误:

无法读取流结尾以外的内容


为什么?

我将重写listener方法,使其看起来像这样。 注意:这是未经测试的代码

static void Listeners()
    {

        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            using (var reader = new BinaryReader(new NetworkStream(socketForClient), Encoding.Default, true))
            {
                while (((int)reader.PeekChar()) != -1)
                {                                 
                    List<int> variables = new List<int>();

                    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();
                 }
            }
     }

我更改了它,但当我的客户端尝试连接到服务器时,它无法显示此错误:按任意键退出服务器程序---请查看更新,我更新了帖子,然后我根据我看到的内容编写了整个侦听器方法,似乎问题在于您使用了一个糟糕的机制来实现您想要的内容。你应该重新设计并看看这个,所以我在我的应用程序中使用了一个线程,那么这两种方法之间有什么不同呢?我是说我的方法和msdn方法你的方法是这样的。我说得对吗?@EA yes;但是,我希望您在进行编辑之前尝试我的编辑,因为我认为这会更简单。
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();

    Thread.Sleep(4000);
}
//Hint : Changes here
binaryWriter.Close();