Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Чтение переменных сообщения, отправленного сервером с использованием сокета

Автор вопроса: Ehsan AkbarОтветов: 1

Я работаю над информационной системой для пассажиров 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 - это сообщение, отправляемое поездами. Моя проблема в том, как я могу определить эти параметры (источник сообщения, пункт назначения сообщения и т. д.) from theString? Я имею в виду, что мне нужно их значение для хранения в базе данных.

с уважением

socketslistenerport

Ответы

Ответ 1 · рейтинг 1 · TyCobb

Похоже, вам не нужно ничего обнаруживать, и определенно не следует не помещать это в строку, чтобы попытаться проанализировать.

Вы уже знаете, что получаете кучу целых чисел. Вы даже знаете, в каком порядке они расположены. Используйте BinaryReader, чтобы получить ваши цифры и продолжить оттуда. После того, как вы загрузите свой ридер, это должно быть так же просто, как вызвать BinaryReader.ReadInt32(), чтобы прочитать номера сообщений один за другим.

Я также настоятельно рекомендую вам ознакомиться с операторами using для ваших потоков.

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

    ... and so on ...
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы