Проблема с клиентским сервером TCP

Возможный дубликат:
Проблема на стороне клиента TCP

У меня большие проблемы с использованием клиентского и серверного приложения С# TCP. Все работает нормально... Но в некоторых случаях, когда TCP-сервер отправляет одновременный ответ TCP-клиенту, клиент может считать, что оба сообщения, отправленные сервером, на самом деле являются одним сообщением. Я не знаю, почему такой случай происходит... Если кто-нибудь знает, пожалуйста, помогите мне. Мой TCP-клиент и сервер написаны на С#.


person Hope    schedule 10.09.2012    source источник


Ответы (2)


Это нормальное поведение для TCP. Он гарантирует вам последовательность (если сервер отправляет А, то Б, клиент никогда не получит Б, то А), но ничего не знает о ваших "сообщениях".

Чтобы разбивать данные на сообщения на стороне клиента, вам нужен какой-то прикладной протокол через TCP. Например, HTTP использует CRLFCRLF для определения конца HTTP-сообщения.
Вы можете использовать существующий или создать свой собственный, в зависимости от ваших потребностей.

person Dennis    schedule 10.09.2012

Нет никакой гарантии соответствия 1-1 между вызовами Write на одном конце соединения TCP и вызовами Read на другом конце. Вы можете не получать данные, получать часть сообщения, сообщение целиком или несколько сообщений при каждом вызове Read.

Вы должны выполнить любую соответствующую работу, чтобы превратить эти блоки данных обратно в сообщения, или переключиться на технологию более высокого уровня (например, WCF), если вы хотите, чтобы что-то еще выполняло тяжелую работу.

person Damien_The_Unbeliever    schedule 10.09.2012