TCP异步套接字抛出10057
我写了以下代码:
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 ); }
当客户端尝试连接时,在Accept()中的BeginReceive调用中抛出错误:
不允许发送或接收数据的请求,因为套接字未连接(当使用sendto调用在数据报套接字上发送时)没有提供地址
是什么导致了这个? 我似乎无法放置它。
谢谢
您需要在BeginReceive
返回的Socket
上调用BeginReceive
(在您的案例client
),而不是服务器Socket
(在您的情况下为m_Socket
):
Socket client = m_Socket.EndAccept( result ); // ... client.BeginAccept( new AsyncCallback( Accept ), null );
有一个示例显示了MSDN上的正确用法。