Всем привет!
Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить
while( !socket.Connected ) {}
так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....
Здравствуйте, Leviafan, Вы писали:
L> Всем привет! L> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>
L>while( !socket.Connected ) {}
L>
L> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....
Здравствуйте, AlexandrV, Вы писали:
AV>Здравствуйте, Leviafan, Вы писали:
L>> Всем привет! L>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>>
Здравствуйте, Leviafan, Вы писали:
L>Здравствуйте, AlexandrV, Вы писали:
AV>>Здравствуйте, Leviafan, Вы писали:
L>>> Всем привет! L>>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>>>
Здравствуйте, Leviafan, Вы писали:
L> Всем привет! L> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>
L>while( !socket.Connected ) {}
L>
L> так она так и зависнет, даже если к этому сокету подключаются!!! Расскажите пожалуйста, как все правильно сделать, можно ссылками....
Здравствуйте, AlexandrV, Вы писали:
AV>Здравствуйте, Leviafan, Вы писали:
L>>Здравствуйте, AlexandrV, Вы писали:
AV>>>Здравствуйте, Leviafan, Вы писали:
L>>>> Всем привет! L>>>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>>>>
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 ) {} // И в этом цикле я кручусь бесконечно даже если соединение есть.
// (Т.е. клиент вроде бы коннектиться к чему-то! А из этого цикла я выйти не могу!
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>
это из первой статьи, пример синхронной, блокирующей работы, а, во второй есть пример и асинхронной работы.
Здравствуйте, AlLucky, Вы писали:
AL>Здравствуйте, Leviafan, Вы писали:
L>> Всем привет! L>> Вопрос такой: как правильно написать сокет, который ждет подключения к нему и при подключении получает некоторые данные? В мсдн-е видел примеры, но у меня проблема в том, что после вызова listen программа сразу идет дальше (хотя, может так и надо), а если поставить L>>
Здравствуйте, Leviafan, Вы писали:
L>Но у меня listen проходит, а как ждать соединения я ни как понять не могу...
Так после Listen просто вешаешь на сокет Accept следующей же строчкой кода
В МСДН просто набираешь в Индексе Socket.Accept method и он Тебе открывает все, что надо.
Можешь также асинхронно Socket.BeginAccept.
А так логика проста — вешаешь listen, а потом Accept
AV>это из первой статьи, пример синхронной, блокирующей работы, а, во второй есть пример и асинхронной работы.
Спасибо! Разобрался. Остался такой вопрос:
Есть у меня в классе переменная, объявленная так:
private System.Windows.....;
Я не могу до нее достучаться из метода acceptCallback Вашего примера. Компилятор пишет:
'Server.Form1....' denotes a 'field' where a 'class' was expected