TCP异步套接字抛出10057

时间:2009-04-07 18:40:42

标签: c# .net sockets

我写了以下代码:

    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调用在数据报套接字上发送时)没有提供地址

造成这种情况的原因是什么?我似乎无法放置它。

由于

1 个答案:

答案 0 :(得分:2)

您需要在BeginReceive(在您的情况下为Socket)返回的EndAccept上致电client,而不是服务器Socket(在您的情况下{ {1}}):

m_Socket

有一个示例显示MSDN上的正确用法。