我编写了以下代码:
public static void BeginListen( int port )
{
IPAddress address = IPAddress.Any;
IPEndPoint endPoint = new IPEndPoint( address, port );
m_Socket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
m_Socket.Bind( endPoint );
m_Socket.Listen( 8 );
m_Socket.BeginAccept( new AsyncCallback( Accept ), null );
}
private static void Accept( IAsyncResult result )
{
Socket client = m_Socket.EndAccept( result );
SocketData state = new SocketData( client, 32767 );
m_Socket.BeginReceive( state.Buffer, 0, state.Buffer.Length, SocketFlags.None,
new AsyncCallback( Receive ), state );
m_Socket.BeginAccept( new AsyncCallback( Accept ), null );
}当客户端尝试连接时,在BeginReceive调用Accept()时会抛出一个错误:
不允许发送或接收数据的请求,因为套接字没有连接,而且(使用sendto调用在数据报套接字上发送时)没有提供地址
是什么引起的?我只是没办法把它放好。
谢谢
发布于 2009-04-07 18:48:51
您需要在由BeginReceive返回的Socket上调用EndAccept (在您的例子中是client),而不是调用服务器Socket (在您的示例中是m_Socket):
Socket client = m_Socket.EndAccept( result );
// ...
client.BeginAccept( new AsyncCallback( Accept ), null );有一个示例显示了MSDN上正确的用法。
https://stackoverflow.com/questions/727074
复制相似问题