我试图在c#中模拟我的机器上的客户端 - 服务器场景。但是当我执行它时会弹出一个异常说:
没有这样的主人知道
我的代码:
namespace TCPClient
{
public class Program
{
public static void Main(string[] args)
{
UdpClient udpc = new UdpClient(args[0], 2055);
IPEndPoint ep = null;
while (true)
{
Console.Write("Name: ");
string name = Console.ReadLine();
if (name == "") break;
byte[] sdata = Encoding.ASCII.GetBytes(name);
udpc.Send(sdata, sdata.Length);
byte[] rdata = udpc.Receive(ref ep);
string job = Encoding.ASCII.GetString(rdata);
Console.WriteLine(job);
}
}
}
}
我不明白我哪里出错了。
答案 0 :(得分:1)
感谢Dev's!你的答案很有帮助,但我找到了最简单的方法。
public class Program
{
public static void Main(string[] args)
{
UdpClient udpc = new UdpClient( System.Net.Dns.GetHostName(), 2055);
IPEndPoint ep = null;
while (true)
{
Console.Write("Name: ");
string name = Console.ReadLine();
if (name == "") break;
byte[] sdata = Encoding.ASCII.GetBytes(name);
udpc.Send(sdata, sdata.Length);
byte[] rdata = udpc.Receive(ref ep);
string job = Encoding.ASCII.GetString(rdata);
Console.WriteLine(job);
}
}
}
答案 1 :(得分:0)
隔离问题。您正在调用可以抛出此异常的new UdpClient(args[0], 2055)
和udpc.Receive(ref ep)
,但不会说出哪个异常。调试它或使用常量字符串尝试:
string host = args[0];
new UdpClient(host, 2055);
然后您会看到host
很可能不是现有的主机名。如果是,请检查您使用ep
执行的操作:没有,所以它将是null
。我想你会想要监听任何UDP数据报as explained in the documentation,所以指定端点:
ep = new IPEndPoint(IPAddress.Any, 0);
答案 2 :(得分:0)
我相信你的问题在于这个电话:
byte[] rdata = udpc.Receive(ref ep)
问题在于,为了能够侦听任何传入内容,首先需要将UdpClient绑定到有效端点 - 如下所示:
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 8192);
//You will be listening to port 8192.
另外,请记住,您不能同时听取和发出相同的UdpClient;您需要两个客户端,如果要为两者使用相同的IP端口,则需要使用SocketOptionName.ReuseAddress
参数初始化该类。以下帖子提供了一个很好的例子: