Đâ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.
Nguồn
2009-04-17 08:53:18
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