Я пытаюсь написать свой собственный сервер WebSocket.
Я знаю, что для этого есть некоторые фреймворки, но я бы хотел научиться, поэтому я делаю это самостоятельно:)
Мой клиент JavaScript в настоящее время реагирует с onOpen
, поэтому я думаю, что рукопожатие допустимо и соединение установлено.
Теперь проблема:
Мой сервер Java использует поток селектора для чтения наКанал.
Если я выполняю *.send("test message")
на объекте WebSocket на моем клиенте, мой сервер не может декодировать байтовый массив.
Я не нашел информации об используемой технологии кодирования / декодированияпоэтому я пытался декодировать множество версий.
, например:
new String(Base64.decodeBase64(buffer.array()))
или
Charset set = Charset.forName("UTF-8");
new String(Base64.decodeBase64(set.decode(buffer).toString()))
Сообщение полностью читается из канала в байтовый буфер, поэтомуЯ не думаю, что это проблема.
Кто-нибудь может мне помочь?
хорошо, это сообщение помогает мне отправлять данные Клиенту.Это отлично работает :)Но я не понимаю, как декодировать данные, полученные от Клиента: (
На Клиента я отправляю только одно Письмо
socket.send("x");
Сервер получает 7 байтов ???
ByteBuffer buffer = ByteBuffer.allocate(8192);
int read = client.getInputStream().read(buffer2.array());
System.out.println("read: " + read);
// read: 7
for (int i = 0; i < read; i++) {
int j = buffer.get(i) & 0xff;
System.out.println("i: " + i + " => " + j + "=>" + new BigInteger(j + "").toString(2));
}
//i: 0 => 129=>10000001
//i: 1 => 129=>10000001
//i: 2 => 195=>11000011
//i: 3 => 235=>11101011
//i: 4 => 4=>100
//i: 5 => 96=>1100000
//i: 6 => 187=>10111011
Если я сделаю это
secondByte AND 0111 1111
, то результат (i: 1) будет равен "1«Я думаю, это означает, что есть только один байт данных.Тогда зачем читать это 7 ???