簡體   English   中英

some.networks 中的“Socket.RemoteHost”返回 IP 而不是 ComputerName - Delphi

[英]"Socket.RemoteHost" in some networks returns IP instead of ComputerName - Delphi

我正在使用 TServerSocket 的“OnClientConnect”來識別客戶端何時連接到聊天,並將客戶端的 ComputerName 保存在列表框中以管理客戶端之間的消息發送。

代碼是這樣的:

    procedure TfrmAnaForm.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    var 
       ComputerName: string;
    begin    
        frmChatMain.lstChatUsers.Items.Add(Socket.RemoteHost);    
    end;

問題是通常“Socket.RemoteHost”返回客戶端的“ComputerName”,但在some.networks中,代碼“Socket.RemoteHost”返回客戶端的IP而不是客戶端的“ComputerName”。

RemoteHost屬性從套接字中檢索客戶端的 IP 地址,然后針對該 IP 執行客戶端主機名的反向 DNS 查找。如果該查找失敗, RemoteHost將返回一個空字符串,而不是 IP 地址。 RemoteHost可以返回 IP 地址的唯一方法是如果這是 DNS 系統實際報告的地址。

您不應該使用RemoteHost來唯一標識客戶端,因為 1) 它甚至不能保證給您一個值,並且 2) 它不能保證是唯一的,例如多個遠程客戶端從同一台計算機連接。網絡。 至少,您必須使用RemoteIP + RemotePort而不是RemoteHost來識別各個連接。 不過,您確實應該使用TCustomWinSocket object 本身來識別唯一連接。 更好的是,要求客戶端使用唯一 ID 登錄到您的服務器,然后您可以將其存儲在TCustomWinSocket.Data屬性中,以便它遵循它所屬的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM