Сокеты C #. Отправка данных через TCP / IP на медленных соединениях - PullRequest
0 голосов
/ 27 апреля 2011

У меня TCP / IP-соединение между сервером и клиентом. Как только соединение установлено, сервер начнет отправлять много данных клиенту. Проблема в том, что если соединение медленное, в какой-то момент сервер перестает отвечать на запросы. Я предполагаю, что это потому, что он буферизует данные, ожидая подтверждения данных, которые уже были отправлены.

Есть ли способ перед отправкой данных проверить размер текущего буфера, поэтому я знаю, что мне следует подождать, прежде чем продолжить отправку данных?

Спасибо.

Это то, что я делаю для отправки данных:

System.Net.Sockets.Socket ClientSocket;
...  
public void Send(byte[] data, int size)
    {
        try
        {
            SocketAsyncEventArgs e = new SocketAsyncEventArgs();
            e.SetBuffer(data, 0, size);
            bool pending = ClientSocket.SendAsync(e);
        }
        catch (Exception ex)
        {

        }
    }

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

В документации для SendAsync говорится, что оно вызовет событие SocketAsyncEventArgs.Completed для параметра e, когда операция будет завершена. Поэтому, если вы напишите обработчик события, который отвечает на это событие, вы всегда сможете узнать, сколько операций у вас осталось.

Здесь достаточно хороший пример использования события: http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

0 голосов
/ 27 апреля 2011

Я нашел решение. В основном я должен отправлять данные только тогда, когда

ClientSocket.Poll(0, SelectMode.SelectWrite) верно.

Легко и эффективно!

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