Windows Sockets, понимающие recv и send - PullRequest
0 голосов
/ 17 февраля 2019

У меня возникла небольшая путаница, скажем, я делаю это:

send(serverSocks, "Size: 1348", strlen("Size: 1348"), 0)

И затем следует:

send(serverSocks, "SomeDataThatIs1348LongAndThatNeedsToBeSent", strlen("SomeDataThatIs1348LongAndThatNeedsToBeSent"), 0)

Поскольку они отправляются последовательно, есть вероятность, что я получу их только одним куском, когда сделаю что-то вроде:

recv(clientSocks, buf, 2000, 0)

Верно?

Какя собираюсь получить его со стороны сервера?Или мне даже нужно, чтобы клиент сначала отправил Размер на сервер?Или я мог бы получить все данные, даже не зная размера?

РЕДАКТИРОВАТЬ:

Может быть, мне нужно сделать мой вопрос более ясным.Как я скажу, что эти данные являются частью этих первых (или вторых) данных, которые были отправлены клиентом?

1 Ответ

0 голосов
/ 17 февраля 2019

Поскольку они отправляются последовательно, есть вероятность, что я получу их только одним куском, когда сделаю что-то вроде:

recv (clientSocks, buf, 2000, 0)

Правильно?

Да.

Как я получу его со стороны сервера?

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

  1. Отправить длину сообщения перед отправкой данных сообщения.Затем получатель может сначала прочитать длину, а затем прочитать определенное количество байтов, следующих за длиной.

  2. Добавлять уникальный разделитель в конце каждого сообщения, то, что никогда не появится всами данные сообщения, такие как байт ETX, нулевой терминатор, разрыв строки и т. д. Затем получатель может читать байты, пока не достигнет разделителя.

Или сделатьМне даже нужен клиент, чтобы сначала отправить Размер на сервер?Или я мог бы получить данные целиком, даже не зная их размера?

TCP - это потоковый транспорт, он не имеет понятия границ сообщений, поэтому вы должны обрабатывать это в самих передаваемых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...