繁体   English   中英

如何知道计算机的“远程主机的DNS名称”?

[英]How to know “The DNS name of the remote host” of a computer?

我有两个程序用于通过UDP协议相互通信(客户端和服务器),但是当客户端使用Connect方法(字符串hostname,int port)连接到服务器时,什么都没发生。 这是代码:

                udpclient.Connect("asuspc",6500);
            string duongdan = tbduongdan.Text;
            Byte[] sendbyte = Encoding.ASCII.GetBytes(duongdan);
            udpclient.Send(sendbyte, sendbyte.Length);

“ asuspc”是我打算连接的计算机的名称。 经过一会儿发现,我知道主机名是“远程主机的DNS名称”而不是计算机的名称,那么“远程主机的DNS名称”是什么?如何知道“远程主机”?

嗯...我认为一点点的TCP / IP读取将对您有很大帮助:-)

每台机器都有一个分配的IP地址。 不必记住那些长IP地址,就创建了DNS服务器,因此您可以编写“ host.domain.com”,并且DNS服务器会告诉您该“计算机DNS名称”与IP地址xx.xx.xx相对应。 .xx。

说,要知道机器的“ DNS名称”,可以在Windows(和Linux)下编写:

nslookup机器的ip_address_of_the_machine

示例:nslookup 192.168.1.2

希望能有所帮助。

在服务器端,(仅获取IP地址的代码)

// get the ip and port number where the client will be listening on
static IPEndPoint GetClientInfo()
{
    // wait for client to send data
    using (UdpClient listener = new UdpClient(6500))
    {
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 6500);
        byte[] receive_byte_array = listener.Receive(ref groupEP);

        return groupEP;
    }
}

然后获得IP

var ip = clientInfo.Address.ToString();
    var port = clientInfo.Port;

UdpClient client = new UdpClient(new IPEndPoint( IPAddress.Any, 6500));
client.Connect(ip, port);  // use ip address

然后在客户端,您可以使用缓冲区接收数据

根据定义,UDP是无连接协议。 您无需连接即可发送/接收数据。

请注意,在UdpClient对象上调用Connect() 只能设置默认的远程主机,因此您不必在每次使用Send方法时都指定它。 因此,不要期望客户端调用Connect方法之后发生任何“意外”。

如果您的服务器和客户端都在专用LAN上,那么为什么不使用计算机的IP? 例如

// replace 192.168.1.44 with the server's private IP
udpclient.Connect("192.168.1.44",6500);
string duongdan = tbduongdan.Text;
Byte[] sendbyte = Encoding.ASCII.GetBytes(duongdan);
udpclient.Send(sendbyte, sendbyte.Length);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM