用serversocket和ClientSocket,用socket.RemoteAddress取得动态IP

解决方案 »

  1.   

    注:你的问题应该是知道目标机器的名称吧?否则你怎么连?
    能否改为如何通过机器名获取目标机的IP地址?在DELPHI WINSOCK单元中
    声明了THOSTENT结构API函数gethostbyname 和gethostname可以实现本地机的相关功能。远程目标机相应功能实现如下:uses 
     …
     winsock;type
     …
      //声明一下自定义过程。
     
    implementation
     …procedure Tform1.buttonclick(sender:Tobject);
    var
     wsadata:Twsadata;
     hostent:phostent;
     cvomputername,sip:string;begin
     scomputername:=edit1.text;
     wsastaruo(2,wsadata);
     hostent:=gethostbyname(Pchar(scomputername));
     with hostent^ do
      sip:=format('%d.%d.%d.%d',[byte(h_addr^[0]),byte(h_addr^[1]),byte(h_addr^[2]),byte(h_addr^[3])]);
     end;wsacleanup;
    edit2.text:=sip;end;说明:
    EDIT1存放机器名
    EDIT1显示解析的IP地址。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,winsock, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     wsadata:Twsadata;
     hostent:phostent;
     scomputername,sip:string;begin scomputername:=edit1.text;
     wsastartup(2,wsadata);
     hostent:=gethostbyname(Pchar(scomputername));
     with hostent^ do
      sip:=format('%d.%d.%d.%d',[byte(h_addr^[0]),byte(h_addr^[1]),byte(h_addr^[2]),byte(h_addr^[3])]);
    wsacleanup;
    edit1.text:=sip;end;end.
      

  3.   

    楼上的,你是高手,佩服!佩服!!!。能否说明一下如何将用Modal互联的两台计算机A,B。B如何知道A的IP地址,如果知道了B的地址A就可以通过Winsock来传送数据了。
      

  4.   

    我现在跟  ronger (小猫)  用相同的问题,分数不够我可以加!谢谢!
      

  5.   

    我现在跟  ronger (小猫)  用相同的问题,分数不够我可以加!谢谢!
      

  6.   

    用TClientSocket与TServerSocket应该可以解决的这两个控件不是有hostname属性吗?端口就不用知道了吧?你既然是通过拨号网络在两台计算机之间建立起连接的怎么会有第三者呢?哈哈!!!