可能的重复:UDP Response或Receiving a response through UDP发送UDP数据包到服务器并得到响应
我已经写在过去的一个月UDP服务器 - 客户端的设置,并有一个工作的服务器。该服务器旨在成为一个通讯程序,用于检索远程客户机请求托管的计算机的相关数据。总的想法是概述如下:
客户端 - >请求数据 - >服务器 - > 进程请求 - >发送响应 - >客户端
而客户端接收数据并根据这些数据做它所需要的。
除了客户端收到数据包并将它们输出到我的测试控制台以外,我能够完成该大纲中的所有操作。如果你想看UdpServer类,这很简单,但只是评论,我会在这里编辑它。
以下是我正在如何接收数据(测试应用程序):
执行: “TEST.EXE <数组索引>”,例如“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!
该错误通常表明该端口在服务器上无法访问,您是否检查过防火墙以确保它允许传入连接? – Rory
我在上个月在同一台两台机器上完成了这个工作,此刻我只是想了解如何从我查询的服务器接收响应数据包。 – Zack