URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4413
[ Назад ]

Исходное сообщение
"Сетевое программирование"

Отправлено Новичок , 28-Июн-05 18:38 
Привет всем!

Сразу извеняюсь что залазею сюда с Windows'ом, но во-первых сетевое программирование под винды в консоли и UNIX похожи, а во-вторых я только учусь, решил с начало под винды на пишу, а потом под UNIX.

Так вот вопрос:

Написал маленький сервак(S) и клиент(C) к нему. Они обмениваются сообщениями и всё в принципе работает, но если запустить S и C сразу по второму кругу, то они блокируются на связке connect-accept(причём скорее на connect) около 5 минут, но если во время блокировки запустить второго C, то всё нормально они с серваком быстро отрабатывают запросы, причём я запускал ещё много раз C и S они быстро работали, а первый С всё весел. Да всё это я тестировал на одной машине.


Содержание

Сообщения в этом обсуждении
"Сетевое программирование"
Отправлено DEC , 28-Июн-05 19:16 
>в принципе работает, но если запустить S и C сразу по
>второму кругу, то они блокируются на связке connect-accept(причём скорее на connect)
>около 5 минут, но если во время блокировки запустить второго C,
>то всё нормально они с серваком быстро отрабатывают запросы, причём я
>запускал ещё много раз C и S они быстро работали, а
>первый С всё весел. Да всё это я тестировал на одной
>машине.

Hint: посмотри траффик во время выполнения, какие пакеты ходят.
посмотри на прослушиваемые порты после отработки программ(может у тебя какой-нибудь FIN_WAIT остаётся висеть)


"Сетевое программирование"
Отправлено Новичок , 28-Июн-05 19:27 
>>в принципе работает, но если запустить S и C сразу по
>>второму кругу, то они блокируются на связке connect-accept(причём скорее на connect)
>>около 5 минут, но если во время блокировки запустить второго C,
>>то всё нормально они с серваком быстро отрабатывают запросы, причём я
>>запускал ещё много раз C и S они быстро работали, а
>>первый С всё весел. Да всё это я тестировал на одной
>>машине.
>
>Hint: посмотри траффик во время выполнения, какие пакеты ходят.
>посмотри на прослушиваемые порты после отработки программ(может у тебя какой-нибудь FIN_WAIT остаётся
>висеть)


А не подскажеш как это сделать(по поводу траффика и портов)?
А то я пока этого не знаю :(


"Сетевое программирование"
Отправлено DEC , 28-Июн-05 20:36 

>А не подскажеш как это сделать(по поводу траффика и портов)?
>А то я пока этого не знаю :(

ну состояние портов командой netstat (оная и в виндозе есть),
а траффик чем под M$ смотреть - не подскажу, погугли на тему снифферов.


"Сетевое программирование"
Отправлено Новичок , 29-Июн-05 08:14 
>
>>А не подскажеш как это сделать(по поводу траффика и портов)?
>>А то я пока этого не знаю :(
>
>ну состояние портов командой netstat (оная и в виндозе есть),
>а траффик чем под M$ смотреть - не подскажу, погугли на тему
>снифферов.


Спасибо, когда разберусь напишу.


"Сетевое программирование"
Отправлено Новичок , 29-Июн-05 18:56 
Ещё раз привет!

Узнал(по моему) как обстоят дела:

У меня порты прописаны жестко. У S 5000, а у С 5001. Так вот после второго запуска, о чем речь была выше, С долбит порт 5000, а S accept не даёт, система ставит флаг TIME_WAIT(из netstat), а когда я запустил второго C, то система выделила новый порт для этого С, причем каждый раз разный. Тогда я решил не привязывать клиента к конкретному порту и всё заработало отлично. Затем я вернул всё обратно S-5000, а С-5001 и убрал у S и С все send и recv, и опять заработало всё отлично. Следовательно они подвешиваут порт даже если их закрывать принудительно. Кто-нибудь может подсказать как их закрыть корректно, чтобы порт был доступен после завершения программы??? А то надо чтоб программа работала на определенных портах.


"Сетевое программирование"
Отправлено DEC , 30-Июн-05 11:14 
>может подсказать как их закрыть корректно, чтобы порт был доступен после
>завершения программы??? А то надо чтоб программа работала на определенных портах.
>
Почитай об особенностях протокола TCP и тебе всё станет ясно ;]


"Сетевое программирование"
Отправлено dimod , 20-Окт-05 16:28 

Нужно с сокетом делать CLOSESOCKET + SOCKETSHUTDOWN