powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / socket-сервер - как пройти через accept дальше?
11 сообщений из 11, страница 1 из 1
socket-сервер - как пройти через accept дальше?
    #38333856
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я жду сигнала в сокет-сервере - socket.accept(). Но мне нужно по идее просто проверить - есть ли данные в сокете, если есть - считать их, если нет - пойти заниматься другими делами. Т.к. я тупой чайник в сокетах, то не знаю, как это сделать в одном потоке (а желательно сделать именно в одном потоке). Как не зависать в ожидании на accept-е, а пройти дальше?
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333865
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333867
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лучше взять готовый. Например Netty.
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333884
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА лучше взять готовый. Например Netty.
То есть в стандартной джаве таких возможностей нет? Просто сколько времени займет изучение нетти? Без него в принципе понятно что делать - если бы не зависание на accept, конечно.
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12То есть в стандартной джаве таких возможностей нет?
Есть. Называется NIO.

else12Просто сколько времени займет изучение нетти?
Гораздо меньше чем написание своего велосипеда и исправления всех косяков в нём. Нет, правда. Ваш вопрос звучит как костатация факта "Изучение существующий решений это неоправданые затраты". Или просто лень?

else12Без него в принципе понятно что делать - если бы не зависание на accept, конечно.

Можно выделить отдельный поток. Примеров Socket сервер в инете масса даже для блокирующих сокетов. Но их, наверное, слишком долго искать и изучать?
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333901
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже в официальном туториале есть примеры с многопоточностью.
http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333906
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
    channel = ServerSocketChannel.open();
    channel.configureBlocking(false);
    channel.socket().bind(addr);
    sch = channel.accept();
    if (sch != null) ...


Это для NIO1. А вот для NIO2:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
      assc=AsynchronousServerSocketChannel.open(acg);
      assc.bind(addr);
      assc.accept(attachment, new CompletionHandler<Void, AsynchronousSocketChannel>>() {
         /** новый клиент подключился */
          public void completed(AsynchronousSocketChannel result, attachment) {
             // сохранить result, запустить обмен...
          }

         /** ошибка подключения */
        public void failed(Throwable exc, attachment) {
       }
);


Но конечно лучше взять готовое решение. Netty это уже стандарт, но объем кода зашкаливает. Если хочется самому поразбираться, то надо брать компактную библиотеку, например df4j .
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333915
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или вот до кучи.
http://forum.vingrad.ru/forum/topic-354065/kw-сокет-байт.html
Аффтар!
- ты не привёл свой код
- тебе придёться либо изучать библиотеки, либо писать на нижнем уровне как системный программист.
- либо идти в Delphi )). Там код Явно разделён на системный и прикладной.
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38333920
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Как не зависать в ожидании на accept-е, а пройти дальше?
channel.configureBlocking(false);

Но в результате, когда клиент попытается подключиться, вы этого не заметите. Чтобы это заметить, нужен отдельный поток.
Этот поток может обрабатывать вообще все асинхронные события, как подключения, так и готовность к обмену (ожидая на Selector.select()).
А вам почему жалко выделить отдельный поток на ожидание accept'ов, получается же проще?
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38334117
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГораздо меньше чем написание своего велосипеда и исправления всех косяков в нём. Нет, правда. Ваш вопрос звучит как костатация факта "Изучение существующий решений это неоправданые затраты". Или просто лень?... Но их, наверное, слишком долго искать и изучать?
Да не лень - просто дифицит времени и решение сразу нескольких задач по разным направлениям - мозги уже разъезжаются... Надо быстро въехать...
...
Рейтинг: 0 / 0
socket-сервер - как пройти через accept дальше?
    #38334121
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqelse12Как не зависать в ожидании на accept-е, а пройти дальше?
channel.configureBlocking(false);

Но в результате, когда клиент попытается подключиться, вы этого не заметите. Чтобы это заметить, нужен отдельный поток.
Этот поток может обрабатывать вообще все асинхронные события, как подключения, так и готовность к обмену (ожидая на Selector.select()).
А вам почему жалко выделить отдельный поток на ожидание accept'ов, получается же проще?
С синхронизациями всего и вся пока не разобрался...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / socket-сервер - как пройти через accept дальше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]