Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отлов момента прекращения получения байтов, Асинхронные сокеты и передача данных 
V
    Опции темы
albert21
  Дата 20.5.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Всем привет!
Как определить, что данные больше не поступают с удалённого хоста (работа с асинхронным сокетом)

//Начинаем получать данные
Код

    public void makeConnections()
    {
        try
        {
            if (null != socket)
            {
                socket.Close();
            }

            IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName());
            IPHostEntry remoteMachineInfo = Dns.GetHostEntry("albertcomp");
            IPEndPoint serverEndpoint = new IPEndPoint(remoteMachineInfo.AddressList[0], 13000);
            IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[0], 0);

            socket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(serverEndpoint);
            socket.BeginReceive(incomingMessage, 0, 256, SocketFlags.None, new AsyncCallback(ReceiveCallback), incomingMessage);
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.ToString());
        }
    }


Код

    private void ReceiveCallback(IAsyncResult result)
    {
        try
        {
            int num_read = socket.EndReceive(result);
            if (num_read>0)
            {
                bytelist.AddRange((byte[])result.AsyncState);
                socket.BeginReceive(incomingMessage, 0, 256, SocketFlags.None, new AsyncCallback(ReceiveCallback), incomingMessage);
            }
            else
            {
                 [color=orangered]//Сюда вообще не попадаем, почему?[/color]
                socket.Close();
                Console.WriteLine("Server Connection Severed");
            }
        }
        catch (ObjectDisposedException)
        {
            socket.Close();
            Console.WriteLine("Sever Connection Severed");
        }
    }
 
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
arilou
Дата 22.5.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Если я не ошибаюсь, в методе ReceiveCallback надо поставить проверку

Код

if(socket.Available > 0)


И если она срабатывает, опять запускать

Код

socket.BeginReceive(incomingMessage, 0, 256, SocketFlags.None, new AsyncCallback(ReceiveCallback), incomingMessage);


Добавлено @ 16:42 
Кстати, надо еще вызывать EndInvoke. Посмотри на CodeProject пример который называется WebDownload (вроде так). 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
albert21
Дата 22.5.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Спасибо, arilou! Всё работает, только я не понял зачем вызывать  EndInvoke и какого объекта этот метод?. Я использовал DataGridView.Invoke, чтобы обратиться к элементу формы не из родного потока этой формы. 
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
arilou
Дата 23.5.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



albert21,  smile сорри - только сча заметил, что ты вызываешь EndReceive. Именно это я и имел ввиду.  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.