2015-12-11 4 views
-1

У меня есть проблема с использованием tcp. Когда я читаю и записываю данные на клиенте или на сервере, он должен читать его как один пакет каждый раз.Данные Tcp привязываются друг к другу

Но иногда, когда я пишу данные очень быстро (в цикле для примера), клиент получил его как один из данных вместо того, чтобы обрабатывать его как три разных пакета, например.

Передача данные:

messageToSend = Encoding.ASCII.GetBytes(data);   
c.GetStream().Write(messageToSend, 0, messageToSend.Length); 

Прием в клиенте:

byte[] message = new byte[1024]; 
int i = 0; 
i = c.GetStream().Read(message, 0, message.Length); 
Encoding.ASCII.GetString(message, 0, i); 
//Handle the new data.... 

Надеется, что это было достаточно ясно, и заранее спасибо!

+0

Покажите, как вы пишете данные клиенту. – Cyclonecode

+0

что-то вроде этого: 'messageToSend = Encoding.ASCII.GetBytes (data); c.GetStream(). Write (messageToSend, 0, messageToSend.Length); ' – cnc

ответ

1

TCP по проекту - это протокол потока, который укладывается в буфер, если вы недостаточно быстро читаете его. Например, UDP представляет собой протокол dgram, который имеет фиксированные пакеты, которые могут быть прочитаны отдельно.

+0

Да, я использовал UDP до этого, но я хотел попробовать TCP. есть ли флаг или что-то, что может мне помочь? – cnc

+0

@cnc № TCP не предоставляет вам пакет/API-интерфейс. Вам нужно будет обработать это самостоятельно каким-либо образом в данных, которые вы отправляете/получаете поверх TCP, чтобы вы могли разделить пакеты, которые имеют смысл для вашего приложения друг от друга, и поэтому вы можете знать, когда у вас есть полный пакет и т. Д. – nos

+0

@nos Итак, вы говорите, что мне нужно добавить строку BEGIN и END и разделить ее? – cnc

Смежные вопросы