2013-04-30 39 views
0

我有一個系統監視器應用程序,需要偵聽來自另一臺機器上各種UDP套接字的消息。其他套接字連續發送心跳給這個給定的IP /端口。主叫BeginReceiveFrom當C#UDP套接字應用程序來收聽來自各種套接字的郵件

此異常被拋出: 「發送或接收數據的請求,但不允許的,因爲在插座沒有被連接和沒有提供地址(使用sendto調用發送數據報套接字時)」

我不應該調用連接,因爲數據已經發送到這個IP端點。加上數據來自各種套接字。

private Socket m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     // bind socket 
     // Establish the local endpoint for the socket. 
     // Dns.GetHostName returns the name of the 
     // host running the application. 
     IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
     IPAddress ipAddress = ipHostInfo.AddressList[0]; 
     m_localEndPoint = new IPEndPoint(ipAddress, 19018); 
     m_socket.Bind(m_localEndPoint); 

     m_socket.BeginReceiveFrom(m_data, 
            m_nBytes, 
            MAX_READ_SIZE, 
            SocketFlags.None, 
            ref m_localEndPoint, 
            new AsyncCallback(OnReceive), 
            null); 

    } 

    private void OnReceive(IAsyncResult ar) 
    { 
      int nRead = m_socket.EndReceiveFrom(ar, ref m_localEndPoint); 
    } 
+0

你運行它爲管理員用戶,防火牆關閉? Windows將阻止「各種端口」上的綁定 – FlavorScape 2013-04-30 19:48:13

+0

我沒有將套接字綁定到各個端口,我將它綁定到一個端口。它從另一臺機器上的各種UDP套接字接收數據。我使用管理員帳戶在Windows XP計算機上運行應用程序。 – Alex 2013-04-30 19:54:57

+0

爲什麼使用'BeginReceiveFrom'而不是'BeginReceive'? – 2013-04-30 20:50:13

回答

0

我能夠得到UdpClient類所需的行爲。

0

你的問題是你綁定到分配給您的IP,你應該綁定到IP要從收到 - 在您的情況:

m_socket.Bind(new IPEndPoint(IPAddress.Any, 12345));