2011-11-25 26 views
5

Tôi đã tìm thấy mã tuyệt vời này trên MSDN cho kết nối máy khách/máy chủ UDP, tuy nhiên máy khách chỉ có thể gửi đến máy chủ, nó không thể trả lời lại. Làm thế nào tôi có thể thực hiện điều này để máy chủ có thể đáp ứng với khách hàng gửi tin nhắn. ServerTrình nghe UDP đáp ứng với máy khách

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 
using System.Security.Cryptography; 


namespace UDP_Server 
{ 
    class Program 
    { 
     private const int listenPort = 11000; 

     private static void StartListener() 
     { 
      bool done = false; 

      UdpClient listener = new UdpClient(listenPort); 
      IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); 
      try 
      { 
       while (!done) 
       { 
        Console.WriteLine("Waiting for broadcast"); 
        byte[] bytes = listener.Receive(ref groupEP); 
        Console.WriteLine("Received broadcast from {0} :\n {1}\n",groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length)); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 
      finally 
      { 
       listener.Close(); 
      } 
     } 

     public static int Main() 
     { 
      StartListener(); 

      return 0; 
     } 
    } 

} 

Và client

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 
using System.Security.Cryptography; 

namespace UDP_Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Send("TEST STRING"); 
      Console.Read(); 
     } 
     static void Send(string Message) 
     { 
      Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
      IPAddress broadcast = IPAddress.Parse("10.1.10.117"); 
      byte[] sendbuf = Encoding.ASCII.GetBytes(Message); 
      IPEndPoint ep = new IPEndPoint(broadcast, 11000); 
      s.SendTo(sendbuf, ep); 
     } 
    } 
} 

Trả lời

8

Chỉ cần làm điều đó theo chiều ngược lại. Gọi số StartListener trên máy khách và có thể nhận dữ liệu udp như máy chủ.

Trên máy chủ của bạn, chỉ cần gửi dữ liệu với mã số khách hàng.

0

Đó là cùng một mã, chỉ với vai trò được đảo ngược. Máy khách cần nghe trên một số cổng và máy chủ gửi thông báo đến điểm cuối của máy khách thay vì địa chỉ quảng bá.

Các vấn đề liên quan