2011-03-15 36 views
0

我發送一些字節的特定端口上偵聽同一端口:如何打開一個封閉的UDP客戶端?

udpBroadcast = new System.Net.Sockets.UdpClient(2333); // local binding 
udpBroadcast.Client.SetSocketOption(SocketOptionLevel.Socket, 
    SocketOptionName.ReuseAddress, true); 
udpBroadcast.Connect("255.255.255.255", 2333); 
udpBroadcast.Send(sendBytes, sendBytes.Length); 
udpBroadcast.Close(); 

udpResponse = new System.Net.Sockets.UdpClient(2333); // local binding 
udpResponse.Client.SetSocketOption(SocketOptionLevel.Socket, 
    SocketOptionName.ReuseAddress, true); 

BeginAsyncReceive(); 

的問題是,我需要重新廣播(對於另一端向我發送更新),但是我有一個ObjectDisposedException udpBroadcast。 我明白Close()處置它,但後來我發現沒有辦法讓它打開。 試圖重新創建(新)udpBroadcast沒有幫助。 謝謝 約翰

+0

失去'Connect'呼叫,UDP是無連接協議。當你調用['Send']時,你可以指定目的地址(http://msdn.microsoft.com/en-us/library/82dxxas0.aspx) – 2011-03-15 17:10:35

回答

0

您可能需要刷新數據以及在關閉並嘗試重新打開之前發送它。這已經導致我以前的問題。

+0

如何完全做到這一點? – user96547 2011-03-15 16:04:39

0

最終我使用這種模式:

using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) 
{ 
    var endPoint = new IPEndPoint(ip, port); 
    socket.Bind(endPoint); 
    using (var client = new UdpClient() {Client = socket}) 
    { 
     var destinationIP = IPAddress.Broadcast; 
     client.Connect(destinationIP, port); 
     client.Send(bytes, bytes.Length); 
    } 
} 

我發現在 http://snipplr.com/view/28192/bind-a-socket-including-udpclient-and-tcpclient-to-a-local-network-interface-card-nic/ 它的工作原理