我有一個系統監視器應用程序,需要偵聽來自另一臺機器上各種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