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

时间:2014-06-22 07:29:01

标签: c# sockets listener port

我正在研究乘客信息系统 PIS (火车)。所以火车将他们的位置发送到我的服务器 PIS 使用端口上的套接字 8080 那么我应该找到他们的位置并向乘客展示。来自火车的信息有一个我应该遵循的模板。正如你在这里看到的那样:

enter image description here

所以你可以看到我们有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,而 theString 是由train发送的消息。我的问题是如何检测这些参数(消息源,消息目的地)等等来自 theString ?我的意思是我需要将它们的值存储在数据库中。

最好的问候

1 个答案:

答案 0 :(得分:1)

看起来你不需要检测任何东西,肯定应该在字符串中将其打包以尝试解析。

你已经知道你正在获得一堆整数。你甚至知道他们的订单。使用BinaryReader来获取你的号码并从那里开始。一旦你加载你的阅读器,就应该像调用BinaryReader.ReadInt32()一样简单地阅读邮件的数字。

我还强烈建议您查看流的using语句。

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

    ... and so on ...
}