我有一个系统监视器应用程序,需要侦听来自另一台机器上各种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);
}
你运行它为管理员用户,防火墙关闭? Windows将阻止“各种端口”上的绑定 – FlavorScape 2013-04-30 19:48:13
我没有将套接字绑定到各个端口,我将它绑定到一个端口。它从另一台机器上的各种UDP套接字接收数据。我使用管理员帐户在Windows XP计算机上运行应用程序。 – Alex 2013-04-30 19:54:57
为什么使用'BeginReceiveFrom'而不是'BeginReceive'? – 2013-04-30 20:50:13