我最近在试着做一个局域网聊天的程序,用UDP分别向本机所在的网段发出信息说明自己上线,然后在接收信息时如果没有这个IP或是这个IP不在线时就会出错。另外如果我知道IP之后,用什么函数可以根据IP得到网上该台计算机名称。
接收时的代码如下:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  MyStream: TMemoryStream;
  TmpStr,sarch_cname,sarch_cip: String;
  k:integer;
begin
   MyStream := TMemoryStream.Create;     listbox1.Items.add(fromip);
  try
    NMUDP1.ReadStream(MyStream);   {如果IP不在会出错退出}
    SetLength(TmpStr,NumberBytes);
    MyStream.Read(TmpStr[1],NumberBytes);
    Memo1.Lines.Add(FromIP+'说: ');
    Memo1.Lines.add('     '+TmpStr);
  finally
    MyStream.Free;
  end;  
end;

解决方案 »

  1.   

    解析IP地址为主机域名。 
    使用 WinSock 单元;过程如下:function IPAddrToName(IPAddr : String): String;varSockAddrIn: TSockAddrIn;HostEnt: PHostEnt;WSAData: TWSAData;beginWSAStartup($101, WSAData);SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);if HostEnt<>nil thenbeginresult:=StrPas(Hostent^.h_name)endelsebeginresult:='';end;end;
      

  2.   

    好象NMUDP中有个属性是HOSTNAME吧,他可以得到主机的名字,以前写过,具体有点遗忘,但是如果对方的HOSTNAME为空那么得到的还是IP