关于Indy idTCPServer 有人说:"Athread.connection.localname得到的只是服务端的计算机名"(100分)

  • 主题发起人 主题发起人 小胡1
  • 开始时间 开始时间

小胡1

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Indy的例子中(/IndyDemos/IdTCPDemo/server.dpr)中看到如下的语句。
procedure Tform1.ServerConnect(AThread: TIdPeerThread);
var
NewClient: PClient;
begin
GetMem(NewClient, SizeOf(TClient));
NewClient.DNS := AThread.Connection.LocalName;
NewClient.Connected := Now;
NewClient.LastAction := NewClient.Connected;
NewClient.Thread :=AThread;
AThread.Data:=TObject(NewClient);
try
Clients.LockList.Add(NewClient);
finally
Clients.UnlockList;
end;
Protocol.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"');
end;

按照这个代码来看,"NewClient.DNS := AThread.Connection.LocalName;"
这句,似乎是要保存Client的计算机名的,我是根据下边"Connection from ...."
来猜测的。 如果AThread.Connection.LocalName不能返回Client的计算机名,
那它返回本机的计算机名有什么用呢?
 
NewClient.IP:=AThread.Connection.Socket.Binding.PeerIP;返回Client的计算机IP
NewClient.Port:=AThread.Connection.Socket.Binding.PeerPort;返回Client的计算机端口
 
要在D7才可以
 
谢谢关注。这个取得Client IP的方法,我在原来的贴子中查到过了。

我只是好奇Indy的例子中,AThread.Connection.LocalName不能返回Client的计算机名,

而例子在memo中的提示信息,像是要显示Client的LocalName似的。
 
我在Indydemo/Chat/server中,也发现了类似的问题。
在Client Infomation页面中,Clietn DNS 也只能显示不了
Clietn的真实计算机名,这算不算是Indy的bug呀?
 
多人接受答案了。
 
后退
顶部