TCP асинхронные сокеты, выбрасывающие 10057 - PullRequest
1 голос
/ 07 апреля 2009

Я написал следующий код:

    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) адрес не был предоставлен

Что вызывает это? Я просто не могу его разместить.

Спасибо

1 Ответ

2 голосов
/ 07 апреля 2009

Вам необходимо позвонить BeginReceive на Socket, возвращаемом EndAccept (в вашем случае client), а не на сервер Socket (в вашем случае m_Socket):

Socket client = m_Socket.EndAccept( result );
// ...
client.BeginAccept( new AsyncCallback( Accept ), null );

Есть пример, который показывает правильное использование на MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...