2009-04-14 35 views
8

Trong C# Tôi đang sử dụng các chức năng UdpClient.Receive:UdpClient nhận về địa chỉ quảng bá

public void StartUdpListener(Object state) 
    { 
     try 
     { 
      udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234)); 
     } 
     catch (SocketException ex) 
     { 
      MessageBox.Show(ex.ErrorCode.ToString()); 
     } 

     IPEndPoint remoteEndPoint = null; 
     receivedNotification=udpServer.Receive(ref remoteEndPoint); 
     ... 

Tuy nhiên tôi nhận được một ngoại lệ ổ cắm nói rằng địa chỉ là không có sẵn với mã lỗi 10.049 Tôi phải làm gì để phủ nhận ngoại lệ này?

Trả lời

16

Đây là jist của một số mã tôi hiện đang sử dụng trong một ứng dụng sản xuất hoạt động (chúng tôi có thêm một chút để xử lý trường hợp máy khách đang chạy ứng dụng máy chủ trên bản cài đặt độc lập). Công việc của nó là nhận thông báo udp rằng các tin nhắn đã sẵn sàng để xử lý. Như đã đề cập bởi Adam Alexander vấn đề duy nhất của bạn là bạn cần phải sử dụng IPAddress.Any, thay vì IPAddress.Broadcast. Bạn sẽ chỉ sử dụng IPAddress.Broadcast khi bạn muốn Gửi gói UDP phát sóng.

Thiết lập các khách hàng udp

this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234); 
this.udpClient = new UdpClient(); 
this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine. 

Và để kích hoạt sự bắt đầu của một async nhận sử dụng một callback.

this.udpClient.Client.Bind(this.broadcastAddress); 
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null); 

Hy vọng điều này sẽ giúp bạn có thể điều chỉnh nó để hoạt động đồng bộ mà không gặp quá nhiều vấn đề. Rất giống với những gì bạn đang làm. Nếu bạn vẫn nhận được lỗi sau này thì một cái gì đó khác phải được sử dụng cổng mà bạn đang cố gắng lắng nghe.

Vì vậy, để làm rõ.

IPAddress.Any = Được sử dụng để nhận. Tôi muốn nghe một gói tin đến bất kỳ Địa chỉ IP nào. IPAddress.Broadcast = Được sử dụng để gửi. Tôi muốn gửi một gói tin cho bất cứ ai đang lắng nghe.

+0

xin chào, trong trường hợp của tôi, tôi gặp lỗi khi phát trên cùng một máy. bạn có gặp lỗi này không, ho cani giải quyết vấn đề này – Smith

4

cho mục đích của bạn Tôi tin rằng bạn sẽ muốn sử dụng IPAddress.Any thay vì IPAddress.Broadcast. Hi vọng điêu nay co ich!

0

Lỗi đó có nghĩa là giao thức không thể liên kết với kết hợp IP/cổng đã chọn.

Tôi không sử dụng phát sóng UDP ở độ tuổi, nhưng tôi nhớ bạn cần sử dụng các dải IP khác nhau.

0

Không có gì sai với cách bạn đã định cấu hình UdpClient của mình. Bạn đã thử một số cổng khác chưa? Có lẽ 1234 đã được sử dụng trên hệ thống của bạn bởi một ứng dụng khác.

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