PDA

Просмотр полной версии : socket, передача коряво получается



Lev
30.03.2005, 21:55
Предисловие: искал на этом форуме что-нибуть про сеть - так и не нашёл. :(
Обстановка:
Я пишу 2 программы клиент и сервер. Они создают сокеты, клиент естественно конектится и, затем, отправляет с помощью send(..) несколько байт. Сервер, приняв с помощью recv(..) начинает отправлять клиенту данные с помощью вызова send(..). В каждом вызове send отправляется примерно 50 байт. Количество вызовов сервером функции send примерно 200. Клиент в свою очередь принимает.
Проблема:
Сервер то отправляет (вызов send удачен), а клиент не принимает или принимает мало (1 или 2 раза). Но если сделать Sleep() на сервере хотя бы 30 миллисекунд перед вызовом send() то клиент примет все 200 раз.
Такое ощущение что для правильной работы нужно что бы клиент работал быстрее чем сервер...
В чем заключается проблема? В SDK написано:"The successful completion of a send does not indicate that the data was successfully delivered"
Как сделать что бы "data was successfully delivered".

Kolinus
31.03.2005, 15:18
"Это аппаратная проблема - программисты их не решают".
если хочешь все корректно разрулить - сделай подщтверждение клиентом принятия пакета и только тогда отправляй новые данные.
а вообще в инете есть книга Й Снейдер (Снайдер) "Эффективное программирование TCP/IP" там очень хорошо про все грабли расписано

Lev
31.03.2005, 19:41
Спасибо, помогли. Уже читатю.

RevYurMIh
02.06.2005, 20:56
А не могли бы кто небудь скинуть этот линк?