Announcement

Collapse
No announcement yet.

IP Adresse des Servers ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • IP Adresse des Servers ausgeben

    Hallo
    Ich hab ein problem!!
    Warum funktioniert die folgende Procedure nicht?

    procedure TInstServer.serveractivClick(Sender: TObject);<br>
    begin<br>
    server.port := Port;<br>
    server.open;<br>
    serveractiv.Checked:=true;<br>
    serverclose.Checked:=false;<br>
    StatusBar1.Panels[0].text := 'Aktiv';<br>
    StatusBar1.Panels[1].text := 'Server IP: ' + Server.Socket.LocalAddress;<br>
    end;<br>

    Und zwar gibt mir diese procedure in StatusBar1.Panels[1] die IP 0.0.0.0 aus, anstatt der richtigen IP!! Was mache ich falsch??

    MFG
    Daniel

  • #2
    dein rechner hat mehr als eine ip z. B. (modem und netzwerkkarte), wenn das modem nicht verbunden ist, also eine ip zugeteilt bekommt, ist diese eben 0.... Probier es mal mit Server.Addres

    Comment


    • #3
      <pre><tt>unit NetworkServices;
      interface
      uses winsock, windows;

      function localIPf:string;

      implementation

      type tapinaddr=array [0..10] of pinaddr;
      papinaddr=^tapinaddr;

      var ginitdata:twsadata;
      dllhandle:hinst;
      err:dword;

      const wsfile='wsock32.dll';

      function localIPf:string;
      var phehostent;
      pptrapinaddr;
      hostn:array[0..63]of char;//Pchar will be more complicated
      i:integer;
      begin
      result:='';
      gethostname(hostn,sizeof(hostn));
      phe:=gethostbyname(hostn);
      if phe=nil then exit;
      pptr:=papinaddr(phe^.h_addr_list);
      i:=0;
      while pptr^[i]<>nil do begin
      result:=string(inet_ntoa(pptr^[i]^));
      inc(i);
      end;
      end;

      function ipaddrtoname(ipaddr:string):string;
      var sockaddrin:tsockaddrin;
      hostenthostent;
      begin
      sockaddrin.sin_addr.s_addr:=inet_addr(pchar(ipaddr ));
      hostent:=gethostbyaddr(@sockaddrin.sin_addr.s_addr ,4,af_inet);
      if hostent<>nil then
      result:=string(hostent^.h_name)
      else
      result:='';
      end;

      procedure initwinsock;
      begin
      dllhandle:=loadlibrary(pchar(wsfile));
      err:=wsastartup($101, ginitdata);
      if err<>0 then begin
      MessageBox(0, 'Error initializing Winsock (Winsock not loaded)', 'Application error', MB_OK or MB_ICONSTOP or MB_TASKMODAL);
      end;
      end;

      procedure closewinsock;
      begin
      wsacleanup;
      freelibrary(dllhandle);
      dllhandle:=0;
      end;

      initialization
      initwinsock;
      finalization
      closewinsock;
      end.</tt></pre>

      gruß, ass

      Comment


      • #4
        Ich glaube hier bin ich richtig.

        Ich habe das Problem, dass ich eine Mail direkt an den mailserver des Empfängers sende möchte. Ansich kein Problem wenn man die Adresse, also z.B. alles anch @ entwickler-forum.de hernimmt. Die Namensauflösung klappt auch soweit, für eine www Adresse mit "gethostbyname". Aber der das Auflösen des sog. MX Mail Exchangers klappt nicht. Vielleicht kann mir jemand helfen.
        [email protected]

        danke

        thoma

        Comment

        Working...
        X