Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WinSock2, ф. Connect [D6]


lead-in ©   (2007-12-14 13:16:00) 

Привет всем. Пытаюсь вот разобраться с библиотечкой WinSock, функция connect всё время возвращает код ошибки 61 (WSAECONNREFUSED, описание: "The attempt to connect was forcefully rejected"). Мож кто использовал эту функцию, знает как она работает. У меня под рукой статьи разные + книжка Флёнова где есть глава "Сеть на низком уровне", по ним и делаю, мне пока нужно просто соединиться с каким-нить портом, если делать с помощью компонентов, то вроде всё нормально проходит, но хотелось бы хоть немного разобраться в этом...(((


slow!alfamoon!com   (2007-12-17 14:53:00) [1]


> Код WSAECONNREFUSED означает, что хост доступен, стек TCP/IP
> на нем работает и ни одного слушающего сокета для заданного
> адреса:порта на хосте не открыто.
>
> Это "порт открыт" или "порт закрыт"?


разумеется, второе


slow!alfamoon!com   (2007-12-17 14:51:00) [2]

книжка Флёнова где есть глава "Сеть на низком уровне"

вреднейшая книженция, имхо.
лучше читать MSDN, про сокеты там написано вполне преемлемо. Или, если с английским сложно, можете почитать нормальные статьи (намек - участвующий в обсуждении Антон Григорьев также является автором некоторых интересных статей)


DiamondShark   (2007-12-17 14:47:00) [3]

Микро-офтоп.


> у Флёнова написано это означает что порт открыт

А что, интересно, в понимании Флёнова означает "порт открыт"?

Код WSAECONNREFUSED означает, что хост доступен, стек TCP/IP на нем работает и ни одного слушающего сокета для заданного адреса:порта на хосте не открыто.

Это "порт открыт" или "порт закрыт"?


DiamondShark   (2007-12-17 14:35:00) [4]


> Если твое, то чем оно обосновано ?

Ссылкой на Флёнова, вестимо. А Флёнов -- это такой пророк.


> Так написано у Флёнова, а мне ничего не остаётся кроме как
> верить на слово...(

Т.е. Флёнову на слово ты веришь больше, чем своим глазам?


> getsockopt(hSocket, SOL_SOCKET, SO_ERROR, @res, res_size);
> ..., то результат всегда res = 0


А какой он, по-твоему, должен быть после вызова WSAGetLastError?


Сергей М.   (2007-12-17 14:00:00) [5]


> Есть мнение что ф. и не должна в обязательном порядке возваращать
> какое-либо корректное значение


Чье мнение ? Твое ? Или Фленова ?
Если твое, то чем оно обосновано ?


Rouse_   (2007-12-17 13:44:00) [6]

res_size := sizeof(res);
res := 0;
if getsockopt(hSocket, SOL_SOCKET, SO_ERROR, @res, res_size) = 0 then
  if res = 0 then showmessage('+') else showmessage('-' + inttostr(res));


lead-in   (2007-12-17 13:37:00) [7]


> Сергей М. ©   (14.12.07 16:45) [5]


Так написано у Флёнова, а мне ничего не остаётся кроме как верить на слово...(


Сергей М.   (2007-12-14 16:45:00) [8]


> не понятно почему получается так как буд-то все порты открыты


С чего ты это взял ?

При попытке коннекта по тср по такому-то адресу ты получил отлуп - разве это говорит о "все порты открыты" ?


lead-in   (2007-12-14 15:12:00) [9]

Суть даже не в том 25 ли порт, открыт он или закрыт (25 вообще-то открыт), не понятно почему получается так как буд-то все порты открыты, а адресс у меня конечно пока 127.0.0.1


Григорьев Антон   (2007-12-14 15:07:00) [10]

А кто на удалённой стороне 25-ый порт слушает и слушает ли вообще? А файрфолом порт не закрыт?

Если вы только разбираетесь с библиотекой сокетов, для начала попробуйте сами сделатиь и клиент, и сервер, и только потом соединяйтесь с чужими серверами. И первый эксперименты делайте на 127.0.0.1 - локальной машине, чтобы не было проблем с настройкой сети.


lead-in   (2007-12-14 14:46:00) [11]

вот отрывочек, WSAstartup перед эти вызывал
=========================
 hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

 inet_addr_correct := inet_addr(PChar(edt1.Text));

 SockAddr.sin_addr.S_addr := inet_addr_correct;
 //
 SockAddr.sin_family := AF_INET;
 SockAddr.sin_port := htons(25);
 //
 if connect(hSocket, @SockAddr, sizeof(SockAddr)) = SOCKET_ERROR then
   showmessage(inttostr(WSAGetLastError));


Есть мнение что ф. и не должна в обязательном порядке возваращать какое-либо корректное значение, но когда добавляю вот это:



 res_size := sizeof(res);
 res := 7;
 getsockopt(hSocket, SOL_SOCKET, SO_ERROR, @res, res_size);
 if opt = 0 then showmessage('+') else showmessage('-' + inttostr(opt));



..., то результат всегда res = 0 причём всегда, у Флёнова написано это означает что порт открыт, но нифига же они у меня все не открыты, тоже непонятно

Мож есть у кого ссылка по этой теме, а то Флёнов особо ничего и не рассписывает, MS SDK есть, но с английским туго - ничево практически непонятно....


Сергей М.   (2007-12-14 13:25:00) [12]


> хотелось бы хоть немного разобраться в этом


Поможем.
Показывай код ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо