2009-12-11 102 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. 您的數據接收事件未觸發。這可能是因爲您沒有正確配置數據端口對象。沒有關於你如何做這件事的更多信息,那將是我最好的選擇。

我會做的是確認您正在讓您的活動先開火。如果您的數據端口對象配置不正確,那可能很容易成爲您的整個問題。如果配置正確,請確認您的服務器實際上正在發送響應。這可能是因爲它沒有發送和回覆,因此你的客戶沒有收到。

相關問題