局域网聊天的程序的一些问题.各位帮帮忙。

gongqs 2003-08-30 11:42:49
我最近在试着做一个局域网聊天的程序,用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;
...全文
27 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
changMeng 2003-08-30
  • 打赏
  • 举报
回复
好象NMUDP中有个属性是HOSTNAME吧,他可以得到主机的名字,以前写过,具体有点遗忘,但是如果对方的HOSTNAME为空那么得到的还是IP
lovedata 2003-08-30
  • 打赏
  • 举报
回复
解析IP地址为主机域名。
使用 WinSock 单元;

过程如下:

function IPAddrToName(IPAddr : String): String;

var

SockAddrIn: TSockAddrIn;

HostEnt: PHostEnt;

WSAData: TWSAData;

begin

WSAStartup($101, WSAData);

SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));

HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);

if HostEnt<>nil then

begin

result:=StrPas(Hostent^.h_name)

end

else

begin

result:='';

end;

end;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧