Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Сети
Войти
Регистрация
Восстановить пароль
 
nnnikotinnn995
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 391
1

Nio идентификация клиента по каналу SocketChannel

12.04.2016, 22:50. Просмотров 323. Ответов 1
Метки нет (Все метки)

Здравствуйте. Голову сломал окончательно, но так и не удалось выяснить как по каналу сервер может определить номер подключенного клиента (по счету). Как вы думаете, это возможно? Проблема в том, что сервер в nio слушает не сокеты клиентов, а каналы по которым сокеты с ним общаются
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
   Set<SelectionKey> readyKeys = selector.selectedKeys();
           Iterator<SelectionKey> iterator = readyKeys.iterator();
            while (iterator.hasNext()) {
             SelectionKey key = (SelectionKey) iterator.next();
                iterator.remove();
                try {
                    if (key.isAcceptable()) {
                        ServerSocketChannel server = (ServerSocketChannel) key.channel();
                        SocketChannel clientn = server.accept();countclient++;
                        clientn.configureBlocking(false);
     clientn.register(selector, SelectionKey.OP_READ); 
                    } 
 else if (key.isWritable()) {
   SocketChannel clientn = (SocketChannel) key.channel();
   buffer.clear();
                            buffer.putDouble(25,Atan_joystickn);buffer.putDouble(25+8,j_Atan_joystickn);
                            buffer.putInt(0,boolmoven);
 
                        clientn.write(buffer);
                        System.out.println(n2 + " bytes written.");// Thread.sleep(155);
                        buffer.clear();
                       clientn.register(selector, SelectionKey.OP_READ); key.attachment();//key.interestOps(SelectionKey.OP_READ);
 }else if (key.isReadable()) {
 SocketChannel clientn = (SocketChannel) key.channel();
    buffer.clear();
    clientn.read(buffer);
Atan_joystickn=buffer.getDouble(25);j_Atan_joystickn=buffer.getDouble(25+8);
boolmoven=buffer.getInt(0);
buffer.flip();
    clientn.register(selector, SelectionKey.OP_WRITE);
                    }
.
.
.
Общение получается, но как определить с кем именно? Получать данные о себе от клиента похоже бесполезно, потому что доступным для записи (if (key.isWritable())) через канал может стать любой клиент и данные предназначенные Пете могут прийти Васе. Не подскажите, как можно идентифицировать клиента в NIO?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2016, 22:50
Ответы с готовыми решениями:

NIO последовательное чтение и запись в SocketChannel
Добрый день. Возникла небольшая проблема при работе с NIO. Ситуация такая:...

Как использовать java.nio.channels.Selector на стороне клиента?
Подскажите пожалуйста (вот уже 3 день бъюсь и не могу решить проблему):...

SocketChannel.finishConnect() как прервать
У SocketChannel (java.nio.channels.SocketChannel) есть метод finishConnect()...

По отправке текста через SocketChannel
В данном примере строка текста проецируется в ByteBuffer с целью дальнейшей...

Передача файла через SocketChannel
Всем привет. Наверняка кто-нибудь сталкивался с такой задачей: нужно передать...

1
nnnikotinnn995
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 391
14.04.2016, 08:11  [ТС] 2
Похоже догнал, это через attach() делается.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2016, 08:11

Передача данных с использованием SocketChannel
При регистрации селектором нового соединения создаем SocketChannel,...

идентификация клиента
Здравствуте! вот мне тут нужно решить задачку, прошу помощи. Суть задачки...

Идентификация клиента сервером
Как сервер точно может отличить разных клиентов с одним IP,чтобы переслать ему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru