RT

解决方案 »

  1.   

    1.本机IP
    function LocalIP:string;
    type
            TaPInAddr = array [0..10] of PInAddr;
            PaPInAddr = ^TaPInAddr;
    var
            phe : PHostEnt;
            pptr : PaPInAddr;
            Buffer : array [0..63] of char;
            I : Integer;
            GInitData : TWSADATA;
    begin
            WSAStartup($101, GInitData);
            Result := '';
            GetHostName(Buffer, SizeOf(Buffer));
            phe :=GetHostByName(buffer);
            if phe = nil then Exit;
            pptr := PaPInAddr(Phe^.h_addr_list);
            I := 0;
            while pptr^[I] <> nil do begin
                    result:=StrPas(inet_ntoa(pptr^[I]^));
                    Inc(I);
            end;
            WSACleanup;
    end;
    2.对方IP
      ServerSocket1.Socket.Connections[i].RemoteAddress
      

  2.   

    如果你不想编太多的代码的话用powersock控件吧。很方便获得本机IP
    x:=Powersock1.LocalIP;
    对方的IP:如果你使用的是WinSocket在这个事件中得到
    procedure TSocketData.ServerSocket1Accept(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
          ClientIP:=Socket.RemoteAddress;        
    end;
      

  3.   

    把客户端IP一块发到服务器,然后进行分解!获得本机IP:
    procedure TF_main.getipaddress;            //&raquo;&ntilde;&micro;&Atilde;±&frac34;&raquo;úIP&micro;&Oslash;&Ouml;·
    var ip,ipstr:string;
        ch:array[1..32] of char;
        i:integer;
        wsdata:twsadata;
        myhost:phostent;
    begin
      if wsastartup(2,wsdata)<>0
        then
          begin
            messagedlg('&Atilde;&raquo;&Oacute;&ETH;&sup3;&Eacute;&sup1;&brvbar;·&micro;&raquo;&Oslash;&pound;&iexcl;',mtinformation,[mbok],0);
            halt(2);
          end;
        try
          if gethostname(@ch[1],32)<>0 then
            begin
              messagedlg('&Atilde;&raquo;&Oacute;&ETH;&sup3;&Eacute;&sup1;&brvbar;·&micro;&raquo;&Oslash;&pound;&iexcl;',mtinformation,[mbok],0);
              halt(3);
            end;
        except
          messagedlg('&Atilde;&raquo;&Oacute;&ETH;&sup3;&Eacute;&sup1;&brvbar;·&micro;&raquo;&Oslash;&pound;&iexcl;',mtinformation,[mbok],0);
          halt(3);
        end;
          myhost:=gethostbyname(@ch[1]);
          if myhost=nil then
            begin
              messagedlg('ip&micro;&Oslash;&Ouml;·&Icirc;&ordf;&iquest;&Otilde;',mtinformation,[mbok],0);
              halt(4);
            end
          else
            begin
              for i:=1 to 4 do
                begin
                  ip:=inttostr(ord(myhost.h_addr^[i-1]));
                  ipstr:=ipstr+ip;
                  if i<4 then
                    ipstr:=ipstr+'.'
                  else
                    strIP:=ipstr;
                end;
            end;
    end;你可以写成函数
      

  4.   

    好像在DELPHI 7下都不能运行呀
      

  5.   

    D7下面没有ServerSocket的,后面那个不行,但前面那个可以
    是需要uses winsock
      

  6.   

    获得本机IP:
    function tloginfrm.getip:string;
           //返回IP
    type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
    var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;
    begin
       // returns ISP assigned IPf   WSAStartup($101, GInitData);
        Result := '';
        GetHostName(Buffer, SizeOf(Buffer));
        phe :=GetHostByName(buffer);
        if phe = nil then Exit;
        pptr := PaPInAddr(Phe^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do begin
          result:=StrPas(inet_ntoa(pptr^[I]^));
          Inc(I);
        end;
        WSACleanup;
    end;
      

  7.   

    看看delphi自带的demo,udp就看udp,tcp/ip的我不记得在哪个目录,找找
      

  8.   

    本机IP
    uses
      ...
      WinSock,
      ...function LocalIP:string;
    type
            TaPInAddr = array [0..10] of PInAddr;
            PaPInAddr = ^TaPInAddr;
    var
            phe : PHostEnt;
            pptr : PaPInAddr;
            Buffer : array [0..63] of char;
            I : Integer;
            GInitData : TWSADATA;
    begin
            WSAStartup($101, GInitData);
            Result := '';
            GetHostName(Buffer, SizeOf(Buffer));
            phe :=GetHostByName(buffer);
            if phe = nil then Exit;
            pptr := PaPInAddr(Phe^.h_addr_list);
            I := 0;
            while pptr^[I] <> nil do begin
                    result:=StrPas(inet_ntoa(pptr^[I]^));
                    Inc(I);
            end;
            WSACleanup;
    end;
    在Delphi6可以通过
      

  9.   

    楼主,你连udp还是tcp/ip都不清楚吗?
      

  10.   

    把下面的这个包装上,在borland\delphi7\bin下面
    dclsockets70.bpl(Borland Socket Components)
    包括的控件:TClientSocket、TServerSocket