2

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

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

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

4

3 回答 3

0

在服务器端,(仅获取 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

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

于 2012-11-13T09:41:46.420 回答
0

嗯...我认为一些 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

希望有帮助。

于 2012-11-13T09:37:47.157 回答
0

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

请注意,调用Connect()对象UdpClient只是设置默认远程主机,这样您不必在每次使用该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);
于 2012-11-13T14:10:27.987 回答