NANDA KUMAR Ответов: 1

Функция Recv в сокете когда я пытался recv то она возвращает только некоторые пакеты


я отправляю 8 пакетов с помощью функции send, но когда я получаю с recv, он дает только меньше 8 пакетов, а не все пакеты, которые я отправил

Что я уже пробовал:

int sending=send(socketid, sendbuff, 8, 0);

пока я получаю

int recive=recv(socketid, sendbuff,sizeof(recebuff), 0);

он получает не все пакеты целиком


это мы используем для подключения сервопривода с помощью устройства lan

Jochen Arndt

Что такое sizeof(recebuff) (как объявляется recebuff)?

NANDA KUMAR

Байт receBuff[128];

[no name]

Это не способ поставить вопрос. Вы предоставляете капельки информации в "пакетах" только частично завершенными. Предоставьте всю информацию заранее в Связной форме, и вы можете получить хороший ответ. Небольшой фрагмент кода также поможет.

KarstenK

Сделайте буфер приема больше.

1 Ответов

Рейтинг:
2

Richard MacCutchan

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


NANDA KUMAR

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

Richard MacCutchan

Вся обработка требует времени - оно определяется законами физики. И даже Скотти не мог их изменить.

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

jeron1

Не хотите поделиться тем, что WSAGetLastError () с остальным классом? и, возможно, настройка сокета, например, это TCP или UDP среди прочего.