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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание сокетов при подключении, как убрать зависание 
:(
    Опции темы
Kirill89
Дата 11.1.2008, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.
Помогите убрать зависание в момент подключения сокета
Код

Dim TCP As Net.Sockets.TcpClient = New Net.Sockets.TcpClient

в момент подключения
Код

TCP.Connect(server)

сама прога не реагирует на запросы пользователя и это выглядит как зависание
а мне надо очень много таких подключений подряд делать.
посоветуйте пожалуйста что-нибудь.

пишу на vb.net - просто так удобнее, если будут примеры на С# - пойму.


--------------------
PM MAIL WWW   Вверх
QryStaL
Дата 11.1.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


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

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



Используй асинхронный метод TcpClient.BeginConnect(). Примеры есть в МСДН.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Kirill89
Дата 11.1.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



QryStaL, спасибо. буду пробовать.


--------------------
PM MAIL WWW   Вверх
Maer
Дата 13.1.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если надо отправит одно сообщения многим Client тогда тебя нади использовать сокетов групповой рассылки.
Например :
 //Для входа в группу

Socket socet=new Socket(AddressFamily.InterNetwork,
                SocketType.Dgram,ProtocolType.Udp);
MulticastOption mulcast=new MulticastOption(groupAddress);
socket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.AddMembership,mulcast);

socket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.MulticastTimeToLive,timeToLive);


//Для выхода из группу

socket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.DropMembership,mulcast);

 smile 
PM MAIL   Вверх
Kirill89
Дата 14.1.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Maer, к сожалению нужно отправлять не одно и то-же сообщение. информация мне очень помогла, я раньше сталкивался с подобной задачей и так и не решил её. большое спасибо. [+]


--------------------
PM MAIL WWW   Вверх
it_medved
Дата 16.1.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 1.5.2007
Где: Днепропетровск

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



а что-бы не зависало, надо всегда пользоваться try{} catch{}
PM MAIL WWW   Вверх
arilou
Дата 16.1.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(it_medved @  16.1.2008,  12:06 Найти цитируемый пост)
а что-бы не зависало, надо всегда пользоваться try{} catch{} 

очень глубокомысленное замечание, а можно поподробнее, как try/catch влияет на блокировку текущего потока для установки соединения?


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


Опытный
**


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

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



используя механизм который предложил QryStaL удалось добиться меньшего зависания... методы подключения и отправки информации прекрасно работают, но вот с чтением проблема(((
было:
Код

Stream = TCP.GetStream
inStream = New System.IO.StreamReader(Stream)
...
strDataIn = inStream.ReadLine

приэтом у инстрим отсутствует beginreading()
пытался сделать так:
Код

Stream = TCP.GetStream
'inStream = New System.IO.StreamReader(Stream)
...
Dim inBuff(255) As Byte
Dim outBuff(255) As Char

Stream.BeginRead(inBuff, 0, 255, requestCallback, state)

System.Convert.ToBase64CharArray(inBuff, 0, 50, outBuff, 1, Base64FormattingOptions.None)
strDataIn = outBuff

но тогда в строковой переменной strDataIn оказывается какой-то бред(

жду ваших предложений...


--------------------
PM MAIL WWW   Вверх
arilou
Дата 17.1.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Kirill89, надо внимательнее читать MSDN

Код

System.Convert.ToBase64CharArray(inBuff, 0, 50, outBuff, 1, Base64FormattingOptions.None)
strDataIn = outBuff


должен быть в requestCallback. Первым методом в нем должно быть Stream.EndRead. Потом проверяешь, есть ли в потоке еще данные и если да, то опять вызываешь BeginRead. 

У вас в VB.NET анонимные методы есть? С ними можно сделать очень красиво.


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


Опытный
**


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

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



arilou, гм... я наверное не совсем понял что к чему... для requestCallback есть событие? smile действительно надо 
Цитата(arilou @  17.1.2008,  10:43 Найти цитируемый пост)
внимательнее читать MSDN

я всё попробую и сразу напишу результат...


--------------------
PM MAIL WWW   Вверх
AET
Дата 20.1.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Kirill89 @ 18.1.2008,  15:02)
arilou, гм... я наверное не совсем понял что к чему... для requestCallback есть событие? smile действительно надо 
Цитата(arilou @  17.1.2008,  10:43 Найти цитируемый пост)
внимательнее читать MSDN

я всё попробую и сразу напишу результат...

можно ваш исходник от програмы тоесть от чата скинь сюда вличка уменя тоже проблема зависает сокеты помаги
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

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

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

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


 




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


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

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