2015-09-05 44 views
0

嗨,大家好我開發的C#與客戶的服務器和大量的應用程序,我需要他們特別comunicate服務器必須發送一個數據包到所有客戶端,這是隨機的時間(只有當另一個程序發送我捕獲的信號時才發送數據包)。我不想使用TCP,因爲它必須儘可能快,因爲我有很多客戶端(它們可以超過一千個)。C#UdpCLient.Receive沒有收到不同的機器上的任何數據

我試圖與UDP一些解決方案,廣播和組播,也有環奇將報文的所有的人。我使用1臺服務器和2臺客戶機進行了測試,這兩種解決方案在同一臺計算機上運行良好,但當我將它放在互聯網上時(服務器在機器上,客戶端在另一臺計算機上在不同網絡中)工作了,客戶沒有收到任何東西。

發信人:

private void send(string packet){ 

     /* code to get the key to encript the data */ 

     byte[] bytes = Encryptor.EncryptString(packet, key); 

     query = "SELECT ip FROM utenti WHERE ID <> 2"; 
     List<string> ips = SelectIPs(query); 

     foreach (string ip in ips){ 
      if (ip == "") 
       continue; 
      UdpClient client = new UdpClient(); 
      IPAddress address = IPAddress.Parse(ip); 
      IPEndPoint ipEndPoint = new IPEndPoint(address, 16759); 
      client.Send(bytes, bytes.Length, ipEndPoint); 
      client.Close(); 
     }  
    } 

接收機:

private void receive(string packet){ 

     receivingUdpClient = new UdpClient(16759); 
     RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("185.43.209.118"), 0); 
     byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); 

     /* code to get the key to decrypt */ 
     string returnData = Encryptor.DecryptString(receiveBytes, key); 

     Console.WriteLine(returnData); 
     return; 
} 

我張貼與迴路中的溶液在發送,但我也試圖與廣播和多播。

在做什麼和爲什麼我如果它們是不同的機器上沒有收到任何東西任何建議?

回答

0

Acorrding你的解釋和你的代碼(即它不僅在另一臺機器上工作),好像是一個端口轉發的問題。您可以在這裏閱讀更多關於它的信息:https://en.wikipedia.org/wiki/Port_forwarding

端口轉發基本上是將您的外部端口映射到內部地址,因此您的計算機可以與其他網絡中的計算機進行通信。

您可以在c#中使用UPnP庫,例如Open.Nat,它支持c#中的端口轉發。 (您的路由器應該啓用端口轉發以允許Open.nat工作)。

Goodluck。

相關問題