Зависание сокетов при подключении

 
0
 
.NET
ava
Kirill89 | 11.01.2008, 09:48
Доброе время суток.
Помогите убрать зависание в момент подключения сокета

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

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

TCP.Connect(server)

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

пишу на vb.net - просто так удобнее, если будут примеры на С# - пойму.
Comments (10)
ava
QryStaL | 11.01.2008, 10:15 #
Используй асинхронный метод TcpClient.BeginConnect(). Примеры есть в МСДН.
ava
Kirill89 | 11.01.2008, 11:13 #
QryStaL, спасибо. буду пробовать.
ava
Maer | 13.01.2008, 00:56 #
Если надо отправит одно сообщения многим 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
ava
Kirill89 | 14.01.2008, 09:30 #
Maer, к сожалению нужно отправлять не одно и то-же сообщение. информация мне очень помогла, я раньше сталкивался с подобной задачей и так и не решил её. большое спасибо. [+]
ava
it_medved | 16.01.2008, 12:06 #
а что-бы не зависало, надо всегда пользоваться try{} catch{}
ava
arilou | 16.01.2008, 12:19 #
Цитата (it_medved @ 16.1.2008, 12:06 findReferencedText)
а что-бы не зависало, надо всегда пользоваться try{} catch{}

очень глубокомысленное замечание, а можно поподробнее, как try/catch влияет на блокировку текущего потока для установки соединения?
ava
Kirill89 | 17.01.2008, 09:22 #
используя механизм который предложил 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 оказывается какой-то бред(

жду ваших предложений...
ava
arilou | 17.01.2008, 10:43 #
Kirill89, надо внимательнее читать MSDN


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


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

У вас в VB.NET анонимные методы есть? С ними можно сделать очень красиво.
ava
Kirill89 | 18.01.2008, 15:02 #
arilou, гм... я наверное не совсем понял что к чему... для requestCallback есть событие? smile действительно надо
Цитата (arilou @ 17.1.2008, 10:43 findReferencedText)
внимательнее читать MSDN

я всё попробую и сразу напишу результат...
ava
AET | 20.01.2008, 16:31 #
Цитата (Kirill89 @ 18.1.2008, 15:02)
arilou, гм... я наверное не совсем понял что к чему... для requestCallback есть событие? smile действительно надо

Цитата (arilou @  17.1.2008, 10:43 \\"findReferencedText\\")
внимательнее читать MSDN


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

можно ваш исходник от програмы тоесть от чата скинь сюда вличка уменя тоже проблема зависает сокеты помаги
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  arilou   QryStaL   Kirill89   AET   it_medved   Maer
advanced
Submit