可能重复: UDP Response或Receiving a response through UDP
我上个月一直在编写一个udp服务器 - 客户端设置,并且有一个正常工作的服务器。此服务器旨在成为一个通信程序,用于检索有关远程客户端计算机请求的托管计算机的数据。总体思路概述如下:
客户 - > 请求数据 - >服务器 - > 处理请求 - > 发送回复 - >客户端
客户端接收数据并根据数据执行所需的操作。
除了客户端接收数据包并将其输出到我的测试控制台之外,我能够完成该大纲中的所有操作。如果你想看UdpServer类,它很简单,但只是注释,我会在编辑中将它发布到这里。
以下是我接收数据的方式(测试应用程序):
执行:“test.exe< array index>”,例如“test.exe 4” - >执行204.229.219.35
public class Program {
static void Main(String[] args) {
string pre = "204.229.219";
string[] servers = {
"31", "32", "33", "34", "35", "36",
"37", "38", "39", "40", "41", "42",
"88", "89"
};
if (args.Length < 1)
{
Environment.Exit(1);
}
int idx = Int32.Parse(args[0]);
Console.Title = "UDPSERVERTEST";
UdpClient c = new UdpClient();
Byte[] data = Encoding.ASCII.GetBytes("net user");
IPEndPoint ep = new IPEndPoint(Dns.GetHostEntry(String.Format("{0}.{1}", pre, servers[idx])).AddressList[0], 8915);
Console.WriteLine("\tQuerying: {0}", String.Format("{0}.{1}", pre, servers[idx]));
c.Send(data, data.Length, ep);
UdpState s = new UdpState();
s.endPoint = new IPEndPoint(IPAddress.Any, 0);
s.host = c;
s.encoding = Encoding.ASCII;
ReceiveCallback(s);
Console.ReadKey(true);
}
private static void ReceiveCallback(UdpState s)
{
byte[] data = s.host.Receive(ref s.endPoint);
Console.WriteLine("Data received from ({0}) -> {1}", s.endPoint.ToString(), s.encoding.GetString(data));
}
private static void callback(IAsyncResult ar)
{
UdpState s = (UdpState)ar.AsyncState;
UdpClient u = s.host;
IPEndPoint e = s.endPoint;
byte[] data = u.EndReceive(ar, ref e);
}
}
在我接收的任何一种方法中,都会出现如下错误:
强行建立现有连接 由远程主机关闭
感谢Stackoverflow!
答案 0 :(得分:0)
您是否可以验证您的文本程序是否正在触发“接收数据”事件?如果你没有得到任何输出到你的测试平台,有两个可能的问题:
我要做的是确认您的活动是先开火。如果未正确配置数据端口对象,则很容易就是整个问题。如果配置正确,请确认您的服务器实际上是在发送响应。它可能不是发送和响应,因此,您的客户端没有收到。