我有两个程序用于通过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名称计算机的远程主机?
答案 0 :(得分: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
希望有所帮助。
答案 1 :(得分: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
然后在客户端,您可以使用缓冲区
接收数据答案 2 :(得分:0)
根据定义,UDP是一种无连接协议。您无需连接即可发送/接收数据。
请注意,在Connect()
对象does nothing other than setting a default remote host上调用UdpClient
,这样您就不必在每次使用Send
方法时都指定它。因此,在客户端调用Connect
方法后,不要指望任何“发生”。
有了这个,如果您的服务器和客户端都在您的专用LAN上,为什么不使用计算机的IP? e.g。
// 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);