将UDP数据包发送到服务器并获得响应

时间:2009-12-11 19:57:51

标签: c# network-programming udp response

可能重复: UDP ResponseReceiving 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!

1 个答案:

答案 0 :(得分:0)

您是否可以验证您的文本程序是否正在触发“接收数据”事件?如果你没有得到任何输出到你的测试平台,有两个可能的问题:

  1. 回复被防火墙阻止了,但你听起来像是在其他计算机上工作,所以我认为这不是问题。
  2. 您的数据接收事件未触发。这可能是因为您没有正确配置数据端口对象。如果没有关于你如何做到这一点的更多信息,这将是我最好的选择。
  3. 我要做的是确认您的活动是先开火。如果未正确配置数据端口对象,则很容易就是整个问题。如果配置正确,请确认您的服务器实际上是在发送响应。它可能不是发送和响应,因此,您的客户端没有收到。