Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > как узнать что на сокет пришли данные?


Автор: Alone 1.8.2003, 10:15
Народ, подскажите кто знает:
Есть клиент на яве. Он посылает серверу запрос и ждет ответ. Это его обычный режим работы.
Но возникает ситуация, когда сервер присылает сообщение для клиента. Как обработать такой вариант?
Я так полагаю, необходимо реализовать процесс "прослушивания" сокета. Но он не должен считывать с него данные (?)

Во фре есть такая замечательная вещь как kevent() & kqueue()
Интересно, может подобные механизмы есть и на явеconfused.gif


Автор: DarkDS 1.8.2003, 11:26
Хмм... А что если взять из сокета инпут стирим и проверять available()?

Автор: Angie 1.8.2003, 12:35
Сокет TCP или UDP? Мне тоже пришлось столкнуться с такой проблемой. Один из выходов: ставь receive() и все. Т.е. без send(). Выходит, что клиент все время ожидает сообщения. А чтоб не висело -- все это счастье в отдельный процесс.

Автор: Alone 2.8.2003, 10:22
Сокет tcp. Я вот тут посмотрел, есть метод ready() Может он спасет отца русской демократии... Надо будет протестить. НО! Если у кого еще какие полезные мысли есть - то плиз сюда.

Автор: Alone 2.8.2003, 10:24
Да, и еще: Если не сложно, киньте пример как сделать отдельный процесс?
Для этого надо набросать какой нить класс, который будет наследником какого нить Thread? А потом что?

Автор: DarkDS 2.8.2003, 10:55
Делаешь наследником от тред... Переопределяешь метод run() так чтобы оттуда шла основная работа (пока он работает - работает тред... если нужно чтобы тред постоянно висел - можно бесконечный цыкл вставить smile.gif )
а потом в основной программе делаешь thread.start(). Могу более подробный пример дать, если нужно smile.gif

Автор: Alone 2.8.2003, 12:13
если можно, в мыло.
[email protected]

Автор: DarkDS 2.8.2003, 13:30
Ушло.
Кстати... Сорри... Не правльно сказал - класс должен быть наследован от Runnable
Пример:
Код

public class MyRunnable implements Runnable {
public void run() {
// Do job
}
}

. а запускать:
Код

Thread thread = new Thread( new MyRunnable() );
thread.start();

Более подробно - смотри в присланном файле

Автор: Alone 4.8.2003, 08:56
м-дя... рамблер тупит... Мыла нет.
давай на альтернативный ящик , ок?
[email protected]

Автор: DarkDS 4.8.2003, 09:15
Ушло-2

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)