我正在研究乘客信息系统 PIS (火车)。所以火车将他们的位置发送到我的服务器 PIS 使用端口上的套接字 8080 那么我应该找到他们的位置并向乘客展示。来自火车的信息有一个我应该遵循的模板。正如你在这里看到的那样:
所以你可以看到我们有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 ?我的意思是我需要将它们的值存储在数据库中。
最好的问候
答案 0 :(得分:1)
看起来你不需要检测任何东西,肯定应该不在字符串中将其打包以尝试解析。
你已经知道你正在获得一堆整数。你甚至知道他们的订单。使用BinaryReader来获取你的号码并从那里开始。一旦你加载你的阅读器,就应该像调用BinaryReader.ReadInt32()
一样简单地阅读邮件的数字。
我还强烈建议您查看流的using
语句。
using (var reader = new BinaryReader(networkStream))
{
var messageSource = reader.ReadInt32();
var messageDestination = reader.ReadInt32();
... and so on ...
}