![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WinSock SEND,RECV слепляются команды
VadimX © (2005-08-29 18:56:00)Передаю данные через WinSock
через SEND RКУС
если после SEND ставить задержку sleep(200);
То все работает, как должно.
Если задержку не ставить, то несколько последовательных
Команд SEND воспринимаются как _ОДНА_ RECV
и в буфере лежат друг за другом.
Если Поставить в SEND,RECV флаг MSG_OOB то не отсылается совсем.
Суслик (2005-08-29 19:24:00) [1]Более того, recv могут прийти не все данные при одном вызове recv.
Т.е. ты посылал 100 байт, а прийдут они двумя порциями
50 байт при первом вызове recv
50 байт при втором.
Тебе нужно придумывать свой протокол, который позволит корректно читать данные. Например первыми 4 байтами передавать длину сообщения.
Алгоритм:
1 Сначала читаешь 4 байта. Замечу, что они тоже (теоретически) могут прийти порциями (например, 2 и 2 байта).
2 Читать столько байт, сколько указано в первых 4 байтах. Пока не будет прочитано все считать, что чтение не полное и читать еще раз (в цикле).
Суслик (2005-08-29 19:18:00) [2]
> Команд SEND воспринимаются как _ОДНА_ RECV
так и должно быть
читай доку по winsock в msdn.