2009-12-11 101 views
0

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

+0

该错误通常表明该端口在服务器上无法访问,您是否检查过防火墙以确保它允许传入连接? – Rory

+0

我在上个月在同一台两台机器上完成了这个工作,此刻我只是想了解如何从我查询的服务器接收响应数据包。 – Zack

回答

0

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

  1. 回复被防火墙阻止,但你让这听起来像这样的作品在其他计算机上,所以我会假设这不是问题。
  2. 您的数据接收事件未触发。这可能是因为您没有正确配置数据端口对象。没有关于你如何做这件事的更多信息,那将是我最好的选择。

我会做的是确认您正在让您的活动先开火。如果您的数据端口对象配置不正确,那可能很容易成为您的整个问题。如果配置正确,请确认您的服务器实际上正在发送响应。这可能是因为它没有发送和回复,因此你的客户没有收到。

相关问题