На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Подконектиться к хосту в локалке а не в инете. , Почему клиент лезет и инет?
    ExpandedWrap disabled
      Что-то раньше не задавался данным вопросом.
       
      Есть 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 вроде коннектиться ок
    пробую прогой не коненктиться
    Сообщение отредактировано: Gen -
      Что значит "лезет в инет"?
        К сожалению по настройкам локальной сети я вообще мало чего понимаю...
        по этому вероятно некорректно выражаюсь.

        Как я понимаю вмест отого что бы коннектиться к хосту в локалке, прога коннкектиться к хосту в интернете.

        Если я использую тот же NetworkEnum для перечисления ресурсов название второго компа в рабочей группе вижу
        WNetAddConnection проходит на него нормально. Но при попытке подконектиться из проги по средствам WinSock
        ни коннектится ни на один из открытых портов. Ни на системные ни на тот что я открыл.

        Ну оно собственно не коннектится с локального компа на IP (192.168.0.3) его же на любой открытый порт, а по 127.0.0.1 Ок

        (Убрал все кроме коненкта GetLastError показывает ошибку 10049 - Требуемый адрес для своего контекста неверен.)
        Сообщение отредактировано: Gen -
          Дельфа небось 2009+?
            Не дельфя 2007

            Все разобрался... это похоже как вчера началось у мя с утечкой памяти в IntToStr так и продолжилось далее....

            Начал проверять все что приходит в функцию... и нашл косяк.

            ExpandedWrap disabled
              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

            Это опять был некорерктно поставленный вопрос с моей стороны. Вы чисто физически не смогли бы помочь не зная чего у меня там переводиться куда и во что.

            Но в любом случае большое спасибо.
              Просто на Дельфе 2009+ вот это Inet_Addr(Pchar(Host)) было бы неверно.

              А что - когда меняешь с integer на cardinal все работает?
              Советую кстати при использовании винапи функций применять именно те типы, которые прописаны в МСДН: HANDLE, DWORD, ... Спасет от многих подобных косяков в будущем
                Да так все работает... у меня в моих функциях StrIPToInt и IntIPToStr

                Числовой вид IP это Cardinal

                Я с помощью функции StrIPToInt получал числовой вид IP (Cardinal)
                далее его передавал в функцию подключения а там была ошибка и был параметр не Cardinal а Integer и после перевода его обратно в string получалась ерунда.

                Сейчас делаю что бы был IP в виде Integer как выдает Inet_Addr (получится нет не знаю пробую пока не получается... каридинал вроде разобрался как перевести а в Integer пока нет)
                  Что-то странное. -1062731773 - можешь проверить в виндовом калькуляторе = C0A80003, что и дает 192.168.0.3.
                  А каков сакральный смысл этих функций и использования целого числа для представлеия IP, когда есть inet_addr(), inet_ntoa() и TSockAddr?
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0.0593 ]   [ 15 queries used ]   [ Generated: 24.10.26, 05:45 GMT ]