Sockets

Модератор: Модераторы

Sockets

Сообщение Коммунар » 05.06.2008 20:09:45

Скажите, где можно понятно почитать про модуль Sockets? А то я читаю справочник по RTL и нифига не въезжаю.
Аватара пользователя
Коммунар
новенький
 
Сообщения: 13
Зарегистрирован: 04.06.2008 23:23:36
Откуда: ССКР

Re: Sockets

Сообщение shade » 06.06.2008 09:46:50

Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Sockets

Сообщение Коммунар » 06.06.2008 11:45:28

shade
Спасибо огромное! Как раз то, что надо!
Аватара пользователя
Коммунар
новенький
 
Сообщения: 13
Зарегистрирован: 04.06.2008 23:23:36
Откуда: ССКР

Re: Sockets

Сообщение Коммунар » 07.06.2008 14:04:46

Теперь уже прикладной вопрос :)
Recv вернул -1 (то бишь, произошла ошибка). В RTL написано, что в случае ошибки подробности будут в SocketError, однако там ноль (в прямом смысле). Что это значит?
Аватара пользователя
Коммунар
новенький
 
Сообщения: 13
Зарегистрирован: 04.06.2008 23:23:36
Откуда: ССКР

Re: Sockets

Сообщение yser » 09.06.2008 09:53:47

Коммунар писал(а):Теперь уже прикладной вопрос :)
Recv вернул -1 (то бишь, произошла ошибка). В RTL написано, что в случае ошибки подробности будут в SocketError, однако там ноль (в прямом смысле). Что это значит?

В своем проект по -1 определяю как потерю связи.
В свое время методом экспериментов получил что -1 появляется:
1. При закрытии сокета если в этот момент сокет ожидал данные.
В моем случае - в потоке recv ожидает данные, а в основной программе закрываю сокет (приэтом я знаю что я закрыл сокет и -1 не обрабатываю).
2. При попытке передать данные через сокет и в этот момент сокет ожидал данные и самое главное связь была потеряна (иногда связь пропадает так что сокет этого не замечает, обычно если соединение через NAT т.е. этом случае ни сервер ни клиент не определяют потерю связи.
В моем случае - в потоке recv ожидает данные, а программа пытается что-то передать через сокет (-1 использую как признак потери связи)
yser
новенький
 
Сообщения: 29
Зарегистрирован: 06.02.2008 11:27:40

Re: Sockets

Сообщение Вадим » 09.06.2008 12:05:27

Вот, как мне показалось, не плохие примеры использования сокетов - Internet Programming with Pascal
http://www.bastisoft.de/pascal/pasinet.html
Сам пока не использовал.
Вадим
новенький
 
Сообщения: 24
Зарегистрирован: 15.04.2007 12:12:26
Откуда: город-герой Волгоград

Re: Sockets

Сообщение Коммунар » 11.06.2008 00:02:21

yser
В моём случае ни первое, ни второе невозможно, поскольку я подключаюсь к локальному (localhost) FTP серверу и жду от него строчку в ~20 символов, которую помещаю в string[255].

Вадим
Спасибо большое! Приведённые примеры не проверял, но поставив Sock2Text вместо recv получил то, что хотел :)
Аватара пользователя
Коммунар
новенький
 
Сообщения: 13
Зарегистрирован: 04.06.2008 23:23:36
Откуда: ССКР

Re: Sockets

Сообщение Вадим » 11.06.2008 08:42:55

Я проверил примеры (ссылку на которые указал) - с небольшими изменениями работают.
А сам столкнулся с проблемой, когда после остановки TCP-сервера не могу вновь его запустить в течении некоторого времени - система отвечает ошибкой на команду Bind, говоря, что порт уже занят. Все дело оказалось в том, что если к серверу был подключен клиент и сервер остановили, то слушающий сокет переходит в состояние TIME_WAIT и находится в нем от 30 сек до 30 минут в зависимости от типа системы, то есть дефолтовых настроек.
Что бы избежать такой проблемы нужно после создания сокета установить опцию SO_REUSEADDR командой SetSocketOptions.

По поводу выявления ситуации потери связи - никак не обнаружишь пока не попытаешся передать данные.
Вадим
новенький
 
Сообщения: 24
Зарегистрирован: 15.04.2007 12:12:26
Откуда: город-герой Волгоград

Re: Sockets

Сообщение Verx0Laz » 02.08.2009 15:45:24

Вадим писал(а):Вот, как мне показалось, не плохие примеры использования сокетов - Internet Programming with Pascal
http://www.bastisoft.de/pascal/pasinet.html
Сам пока не использовал.


Ссылка изменилась. Теперь правильно так:
http://www.bastisoft.de/programmierung/ ... sinet.html
Аватара пользователя
Verx0Laz
постоялец
 
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07


Вернуться в Сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru