Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# 读取服务器使用套接字发送的消息的变量_C#_Sockets_Listener_Port - Fatal编程技术网

C# 读取服务器使用套接字发送的消息的变量

C# 读取服务器使用套接字发送的消息的变量,c#,sockets,listener,port,C#,Sockets,Listener,Port,我正在使用乘客信息系统PIS(火车)。因此,火车使用端口8080上的套接字将其位置发送到我的服务器PIS。因此,我应该获取其位置并向乘客显示。来自火车的信息有一个模板,我应该遵循这个模板。正如你在这里看到的: 如您所见,这里有6个变量。每个整数是4字节。第一个变量是(4字节)消息源等 在我的服务器中,我必须检测这些变量,但我不知道如何从消息中检测它们 static void Listeners() { Socket socketForClient =

我正在使用乘客信息系统PIS(火车)。因此,火车使用端口8080上的套接字将其位置发送到我的服务器PIS。因此,我应该获取其位置并向乘客显示。来自火车的信息有一个模板,我应该遵循这个模板。正如你在这里看到的:

如您所见,这里有6个变量。每个整数是4字节。第一个变量是(4字节)消息源

在我的服务器中,我必须检测这些变量,但我不知道如何从消息中检测它们

 static void Listeners()
        {

            Socket socketForClient = tcpListener.AcceptSocket();
            if (socketForClient.Connected)
            {
                Console.WriteLine("Client:" + socketForClient.RemoteEndPoint + " now connected to server.");
                NetworkStream networkStream = new NetworkStream(socketForClient);
                System.IO.StreamWriter streamWriter =
                new System.IO.StreamWriter(networkStream);
                System.IO.StreamReader streamReader =
                new System.IO.StreamReader(networkStream);

                while (true)
                {

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

                    //-----
                    string theString = streamReader.ReadLine();

                }
         }
}
这是我的侦听器到8080端口,字符串是通过火车发送的消息。我的问题是如何从字符串中检测这些参数(消息源、消息目的地等)?我的意思是我需要将它们的值存储在数据库中


“致以最诚挚的问候”

看起来您不需要检测任何东西,而且肯定不应该将其插入字符串中以尝试解析

你已经知道你得到了一堆整数。你甚至知道他们的顺序。使用a来获取您的号码,然后从那里开始。一旦加载了阅读器,就应该像调用
BinaryReader.ReadInt32()
一个接一个地读取消息的数字一样简单

我还必须强烈建议您为您的流使用
语句

using (var reader = new BinaryReader(networkStream))
{
    var messageSource = reader.ReadInt32();
    var messageDestination = reader.ReadInt32();

    ... and so on ...
}

@完成了。还有一个关于我提供给MSDN文档的链接的例子。只有一个问题,我的整数长度是静态的。我应该使用这个:pos+=sizeof(int)@EA编号。
BinaryReader
应该已经为您处理了。每次调用
ReadInt32()
时,它都会自动将其移动4个字节,因为这是32位整数的大小。除非需要跳过
x
字节数,否则不必手动移动。我在读取二进制数据时遇到问题,如果可能,请查看: