2014-01-03 3 views
0

Я пытаюсь читать пакеты на порте, который принимает 4 последовательных пакета. Когда я пытаюсь читать эти данные с использованием потока ввода, некоторые данные перекрываются. Когда-то следующий пакет слияния с предыдущими пакетами , Вот это процесс, который я следуюПереполнение пакетов Socket Socket

1. For every connection opening a new socket and starting a thread. 

//Open a port on server socket. 
     //While new Socket 
       //accept a socket connection. 
       //Start a new thread for that socket.    



    2. After that in threads run method tring to get all four packets 
     for(int i=0;i<4;i++) 
     { 
     InputStream inputDataStream=socket.getInputStream(); 
      //Than converting it to byte array. 
     } 

При обработке этого байта массивов несколько раз на пакете перекрывающиеся с предыдущим packet.How можно прочитать все 4 пакетов без перекрытия.

ответ

1

Я пытаюсь читать пакеты на порте, который принимает 4 последовательных пакета.

Не с TCP вы не являетесь. TCP - это протокол байтового потока. Нет «пакетов».

Когда я пытаюсь читать эти данные с использованием потока ввода, некоторые данные перекрываются. Значит, когда-то следующий пакет объединяется с предыдущими пакетами.

Этого вполне можно ожидать. Вот как работает TCP. Пакетов нет. Границ сообщений нет. Не гарантируется соответствие между объемом данных, представленным write(), и объемом данных, считанных read().

Если вы хотите получать сообщения, вы должны реализовать их самостоятельно, с, например:

  • длина слова префикс
  • протокол прикладного, таких как тип-длина-значение
  • самоописательное протокол такие как Сериализация объектов, XML и т. д.
Смежные вопросы