比如将 127.0.0.1   端口:8000   转换成 sockaddr_in

解决方案 »

  1.   

    兄弟别怪我说你, 这样的问题你拿出来问是在耗费你的时间, 有这个时间看一下msdn答案不就有了.
      

  2.   


    function Addrin(IP:string;port:Word):TSockAddrIn;
    var
      SockAdd_In : TSockAddrIn;
    begin
      SockAdd_In.sin_family := PF_INET;
      SockAdd_In.sin_port := htons(port);
      SockAdd_In.sin_addr.S_addr :=ntohl(inet_addr(PAnsiChar(IP)));
    //结果总是不对啊!!!
    end;
    Funct
      

  3.   

    procedure TMainForm.Button1Click(Sender: TObject);
    var
      car:sockaddr_in;
    begin
      car:=BindAddrin('127.0.0.1','8000');
      ShowMessage(inet_ntoa(car.sin_addr));
      ShowMessage(IntToStr(ntohs(car.sin_port )));
    end;
    测试了,地址总是不对
      

  4.   

    地址的字节序不用转换  
    SockAdd_In.sin_addr.S_addr :=inet_addr(PAnsiChar(IP));另外请注意delphi的版本, 如果高版本的(delphi2009以上)用下面的 
    SockAdd_In.sin_addr.S_addr :=inet_addr(PAnsiChar(AnsiString(IP)));
      

  5.   


    {$R *.dfm}
    function BindAddrin(IP:PAnsiChar):TSockAddrIn;
    var
      SockAdd : sockaddr_in;
    begin
      SockAdd.sin_family := AF_INET;
      SockAdd.sin_addr.S_addr :=inet_addr(PAnsiChar(AnsiString(IP)));
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      src:sockaddr_in ;
    begin
      src:=BindAddrin('127.0.0.1');
      ShowMessage(String(StrPas(inet_ntoa(Src.sin_addr))));
    end;//早就试过了,不对。
      

  6.   


    如果楼主程序是这么写的话 应该是 function 函数里 少一句 Result := SockAdd;
    其他没什么错误