2013-04-30 36 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));