Помогите разобраться с сокетами!!!!!
От: Leviafan  
Дата: 22.02.05 08:11
Оценка:
Всем привет!
Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
while( !socket.Connected ) {}

так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....
Z
Re: Помогите разобраться с сокетами!!!!!
От: AlexandrV  
Дата: 22.02.05 08:18
Оценка: 7 (1)
Здравствуйте, Leviafan, Вы писали:

L> Всем привет!

L> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>
L>while( !socket.Connected ) {}
L>

L> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

http://www.dotsite.ru/Publications/Publication160.aspx

http://www.dotsite.ru/Publications/Publication162.aspx
Re[2]: Помогите разобраться с сокетами!!!!!
От: Leviafan  
Дата: 22.02.05 08:57
Оценка:
Здравствуйте, AlexandrV, Вы писали:

AV>Здравствуйте, Leviafan, Вы писали:


L>> Всем привет!

L>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>>
L>>while( !socket.Connected ) {}
L>>

L>> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

AV>http://www.dotsite.ru/Publications/Publication160.aspx


AV>http://www.dotsite.ru/Publications/Publication162.aspx



Не совсем понятно! Как мне это с сокетами связать??? (Извините за идиотизм)....
Z
Re[3]: Помогите разобраться с сокетами!!!!!
От: AlexandrV  
Дата: 22.02.05 09:10
Оценка:
Здравствуйте, Leviafan, Вы писали:

L>Здравствуйте, AlexandrV, Вы писали:


AV>>Здравствуйте, Leviafan, Вы писали:


L>>> Всем привет!

L>>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>>>
L>>>while( !socket.Connected ) {}
L>>>

L>>> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

AV>>http://www.dotsite.ru/Publications/Publication160.aspx


AV>>http://www.dotsite.ru/Publications/Publication162.aspx



L>Не совсем понятно! Как мне это с сокетами связать??? (Извините за идиотизм)....


так вы почитали? там есть информация о том, как работать с сокетами:
— первая статья в синхронном (блокирующем режиме)
— вторая в асинхронном.
Re: Помогите разобраться с сокетами!!!!!
От: AlLucky Беларусь Qulix Systems
Дата: 22.02.05 09:51
Оценка:
Здравствуйте, Leviafan, Вы писали:

L> Всем привет!

L> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>
L>while( !socket.Connected ) {}
L>

L> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

Посмотри
Socket.Accept
ПРимер тут : ms-help://MS.MSDNQTR.2004APR.1033/cpref/html/frlrfsystemnetsocketssocketclasstopic.htm
Это просто описание класса Socket, там есть нормальный пример.
Sincerely Mine ... AlLucky Sly << RSDN@Home 1.1.4 Cranberries — When You're Gone >>
Aleksandr Sly
Re[4]: Помогите разобраться с сокетами!!!!!
От: Leviafan  
Дата: 24.02.05 06:53
Оценка:
Здравствуйте, AlexandrV, Вы писали:

AV>Здравствуйте, Leviafan, Вы писали:


L>>Здравствуйте, AlexandrV, Вы писали:


AV>>>Здравствуйте, Leviafan, Вы писали:


L>>>> Всем привет!

L>>>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>>>>
L>>>>while( !socket.Connected ) {}
L>>>>

L>>>> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

AV>>>http://www.dotsite.ru/Publications/Publication160.aspx


AV>>>http://www.dotsite.ru/Publications/Publication162.aspx



L>>Не совсем понятно! Как мне это с сокетами связать??? (Извините за идиотизм)....


AV>так вы почитали? там есть информация о том, как работать с сокетами:

AV>- первая статья в синхронном (блокирующем режиме)
AV>- вторая в асинхронном.

Вы имеете ввиду этот кусок:


TcpClient client = null;
while (!listener.Pending() && !SocketTerminate) // Тут ожидаем соединения?
  Thread.Sleep(100);
if (!SocketTerminate)
{
   client = listener.AcceptTcpClient();    // А это уже прием?
   if (client != null)
   lock (clients)
   {
     clients.Enqueue(client);
     Console.WriteLine("Connected!");
     Console.WriteLine("Waiting for a new connection... ");
   }
}


Я делаю так:

socket.Bind(point);
socket.Listen(10);
while( !socket.Connected ) {} // И в этом цикле я кручусь бесконечно даже если соединение есть. 
                              // (Т.е. клиент вроде бы коннектиться к чему-то! А из этого цикла я выйти не могу!
Z
Re[5]: Помогите разобраться с сокетами!!!!!
От: AlexandrV  
Дата: 24.02.05 06:55
Оценка:
Здравствуйте, Leviafan, Вы писали:


<skipped>

L>Вы имеете ввиду этот кусок:


L>

L>TcpClient client = null;
L>while (!listener.Pending() && !SocketTerminate) // Тут ожидаем соединения?
L>  Thread.Sleep(100);
L>if (!SocketTerminate)
L>{
L>   client = listener.AcceptTcpClient();    // А это уже прием?
L>   if (client != null)
L>   lock (clients)
L>   {
L>     clients.Enqueue(client);
L>     Console.WriteLine("Connected!");
L>     Console.WriteLine("Waiting for a new connection... ");
L>   }
L>}

L>


L>Я делаю так:


L>
L>socket.Bind(point);
L>socket.Listen(10);
L>while( !socket.Connected ) {} // И в этом цикле я кручусь бесконечно даже если соединение есть. 
L>                              // (Т.е. клиент вроде бы коннектиться к чему-то! А из этого цикла я выйти не могу!

L>



это из первой статьи, пример синхронной, блокирующей работы, а, во второй есть пример и асинхронной работы.
Re[2]: Помогите разобраться с сокетами!!!!!
От: Leviafan  
Дата: 24.02.05 07:07
Оценка:
Здравствуйте, AlLucky, Вы писали:

AL>Здравствуйте, Leviafan, Вы писали:


L>> Всем привет!

L>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
L>>
L>>while( !socket.Connected ) {}
L>>

L>> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....

AL>Посмотри

AL>Socket.Accept
AL>ПРимер тут : ms-help://MS.MSDNQTR.2004APR.1033/cpref/html/frlrfsystemnetsocketssocketclasstopic.htm
AL>Это просто описание класса Socket, там есть нормальный пример.

К сосожалению нету последнего мсдн. Есть что-нибудь такое в сети?
По этой ссылке есть хороший пример:

http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemnetsocketssocketclasstopic.asp

а по этой про listen:

http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemnetsocketssocketclasslistentopic.asp

Но у меня listen проходит, а как ждать соединения я ни как понять не могу...
Z
Re[3]: Помогите разобраться с сокетами!!!!!
От: AlLucky Беларусь Qulix Systems
Дата: 24.02.05 09:12
Оценка:
Здравствуйте, Leviafan, Вы писали:

L>Но у меня listen проходит, а как ждать соединения я ни как понять не могу...

Так после Listen просто вешаешь на сокет Accept следующей же строчкой кода
В МСДН просто набираешь в Индексе Socket.Accept method и он Тебе открывает все, что надо.
Можешь также асинхронно Socket.BeginAccept.

А так логика проста — вешаешь listen, а потом Accept
Sincerely Mine ... AlLucky Sly << RSDN@Home 1.1.4 Слушаю болтовню коллег... >>
Aleksandr Sly
Re[6]: Помогите разобраться с сокетами!!!!!
От: Leviafan  
Дата: 05.03.05 07:21
Оценка:
AV>это из первой статьи, пример синхронной, блокирующей работы, а, во второй есть пример и асинхронной работы.

Спасибо! Разобрался. Остался такой вопрос:
Есть у меня в классе переменная, объявленная так:

private System.Windows.....;


Я не могу до нее достучаться из метода acceptCallback Вашего примера. Компилятор пишет:
'Server.Form1....' denotes a 'field' where a 'class' was expected

Помогите пожалуйста, а? ))
Z
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.