Я пытаюсь передать данные между сервером и клиентским компьютером, используя мою программу. Я очень мало знаю о TCP и о том, как он работает, поэтому мне действительно нужна помощь.Толкование сообщения сервера клиентов
До сих пор сообщение о моем собственном упрощенном протоколе определяется следующим образом:
int _header_signature;
int _offset_a;
int _offset_b;
int _size_a;
int _size_b;
wchar_t stuff[_size_a];
wchar_t stuff2[_size_b];
int _footer_signature;
Это получает сериализовать на буфер и получает отправить с помощью метода send()
Winsock в.
Моя цель - как-то интерпретировать это сообщение и извлекать данные в подобной структуре на серверной машине. Это соединение «один к одному» между клиентом и сервером.
Как я мог бы интерпретировать эти данные на серверной части?
я бы:
а) Цикл вызова recv()
писать то, что я получаю в буфер, и начать работать на интерпретируют сообщение только тогда, когдаrecv()
не имеет ничего больше, чтобы вернуться, и все сообщения, отправленного в настоящее время на буфер? Я также не уверен, что произойдет, если клиент продолжит отправлять сообщения. Будет ли второе сообщение, скажем, прибыть только тогда, когда первый закончил быть recv()
'd? Или будет recv()
продолжать возвращать вещи, пока клиент продолжает отправлять сообщения?
ИЛИ
б) Начало работы над интерпретацией этого сообщения, как только они приходят, даже если только часть сообщения прибыла? Заголовок должен сказать, сколько еще я должен ожидать. (это кажется очень длинной и утомительной задачей)
Не существует способа получить как все сообщение, полученное в буфер, и каким-то образом передать его в структуру, чтобы я мог работать с данными?
Я извиняюсь, если я спутать кого угодно, если что-то непонятно, пожалуйста, скажите мне, и я буду обновлять этот вопрос
Так что вы говорите мне (если буфер, который recv() пишет меньше моего сообщения), мне нужно вызвать recv() получить небольшую часть сообщения, использовать некоторый код для интерпретации столько же, сколько , call recv() снова получает еще одну небольшую часть сообщения и интерпретирует столько, сколько получено, и так далее и так далее? –
Да, на самом деле не имеет значения, насколько большой буфер вы используете, он может не заполниться одним вызовом recv(). –