Подконектиться к хосту в локалке а не в инете.
, Почему клиент лезет и инет?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Подконектиться к хосту в локалке а не в инете.
, Почему клиент лезет и инет?
|
Сообщ.
#1
,
|
|
|
|
![]() ![]() Что-то раньше не задавался данным вопросом. Есть 2 компьютера подключенных к роутеру... роутер подключен к инету IP одного компа 192.168.0.2 IP второго компа 192.168.0.3 Написал небольшой сервер, поставил его на комп №1 С компа №2 пытаюсь подключиться к компу №1 Если клиента поставить на тот же комп что и сервер то подключение по 127.0.0.1 на выбранный порт идет ок а вот со второго компа прога хоть убейся лезет в интернет а не на локальный комп. Подскажите пожалуйста, может при создании сокета что то надо отличное указывать? [CODE=pas] Function ConnectToServer(Var MySocket:Integer;Const Host:String;Const Port:Cardinal;Const TimeOut:Cardinal):Boolean; Var SocketAddr:TSockAddrIn; Begin MySocket:=-1; MySocket:=Socket(AF_Inet,Sock_Stream,IPProto_IP); If MySocket>0 Then Begin SocketAddr.sin_family:=AF_Inet; SocketAddr.sin_port:=Htons(Port); SocketAddr.Sin_Addr.S_Addr:=Inet_Addr(Pchar(Host)); Connect(MySocket,SocketAddr,SizeOf(SocketAddr)); End; End; А забыл дописать... уже подмал может чего не открыто у меня там... стал пробовать подконектиться на точно открытый порт... С 192.168.0.3 пробую: telnet 192.168.0.2 135 вроде коннектиться ок пробую прогой не коненктиться |
|
Сообщ.
#2
,
|
|
|
|
Что значит "лезет в инет"?
|
|
Сообщ.
#3
,
|
|
|
|
К сожалению по настройкам локальной сети я вообще мало чего понимаю...
по этому вероятно некорректно выражаюсь. Как я понимаю вмест отого что бы коннектиться к хосту в локалке, прога коннкектиться к хосту в интернете. Если я использую тот же NetworkEnum для перечисления ресурсов название второго компа в рабочей группе вижу WNetAddConnection проходит на него нормально. Но при попытке подконектиться из проги по средствам WinSock ни коннектится ни на один из открытых портов. Ни на системные ни на тот что я открыл. Ну оно собственно не коннектится с локального компа на IP (192.168.0.3) его же на любой открытый порт, а по 127.0.0.1 Ок (Убрал все кроме коненкта GetLastError показывает ошибку 10049 - Требуемый адрес для своего контекста неверен.) |
|
Сообщ.
#4
,
|
|
|
|
Дельфа небось 2009+?
|
|
Сообщ.
#5
,
|
|
|
|
Не дельфя 2007
Все разобрался... это похоже как вчера началось у мя с утечкой памяти в IntToStr так и продолжилось далее.... Начал проверять все что приходит в функцию... и нашл косяк. ![]() ![]() Function ConnectToServer(Const Host:Integer;Const Port:Cardinal;Const TimeOut:Cardinal):Boolean; Host:Integer А Host то у меня Cardinal; Вот и получалось что при переводе из String в Cardinal 127.0.0.1 = 2130706433 (в пределах Integer) и коненктилось ок 192.168.0.3 = 3232235672 (За пределами Integer и соответсвенно) = -1062731773 При переводе из 2130706433 получаю 127.0.0.1 а при переводе -1062731773 получаю 255.255.255.255 Это опять был некорерктно поставленный вопрос с моей стороны. Вы чисто физически не смогли бы помочь не зная чего у меня там переводиться куда и во что. Но в любом случае большое спасибо. |
|
Сообщ.
#6
,
|
|
|
|
Просто на Дельфе 2009+ вот это Inet_Addr(Pchar(Host)) было бы неверно.
А что - когда меняешь с integer на cardinal все работает? Советую кстати при использовании винапи функций применять именно те типы, которые прописаны в МСДН: HANDLE, DWORD, ... Спасет от многих подобных косяков в будущем |
|
Сообщ.
#7
,
|
|
|
|
Да так все работает... у меня в моих функциях StrIPToInt и IntIPToStr
Числовой вид IP это Cardinal Я с помощью функции StrIPToInt получал числовой вид IP (Cardinal) далее его передавал в функцию подключения а там была ошибка и был параметр не Cardinal а Integer и после перевода его обратно в string получалась ерунда. Сейчас делаю что бы был IP в виде Integer как выдает Inet_Addr (получится нет не знаю пробую пока не получается... каридинал вроде разобрался как перевести а в Integer пока нет) |
|
Сообщ.
#8
,
|
|
|
|
Что-то странное. -1062731773 - можешь проверить в виндовом калькуляторе = C0A80003, что и дает 192.168.0.3.
А каков сакральный смысл этих функций и использования целого числа для представлеия IP, когда есть inet_addr(), inet_ntoa() и TSockAddr? |