Я использую следующую функцию Arduino для отправки данных через веб-соединение:
void WebSocketClient::sendEncodedData(String& str, uint8_t opcode) {
uint8_t mask[4];
int size = str.length()+1;
// Opcode; final fragment
socket_client->write(opcode | WS_FIN);
// NOTE: no support for > 16-bit sized messages
if (size > 125) {
socket_client->write(WS_SIZE16 | WS_MASK);
socket_client->write((uint8_t)(size >> 8));
socket_client->write((uint8_t)(size & 0xFF));
}
else {
socket_client->write((uint8_t)size | WS_MASK);
}
mask[0] = random(0, 256);
mask[1] = random(0, 256);
mask[2] = random(0, 256);
mask[3] = random(0, 256);
socket_client->write(mask[0]);
socket_client->write(mask[1]);
socket_client->write(mask[2]);
socket_client->write(mask[3]);
for (int i = 0; i<size; ++i) {
socket_client->write(str[i] ^ mask[i % 4]);
}
}
Эта функция принадлежит этой библиотеке реализации клиента веб-сокета Arduino.
Мой код сервера java websocket с использованием проекта Tyrus выглядит следующим образом:
public static void runServer() {
Server server = new Server("192.168.1.105", 8025, "/websockets", ArduinoEndPoint.class);
try {
server.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please press a key to stop the server.");
reader.readLine();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
server.stop();
}
}
Класс ArduinoEndPoint в приведенном выше коде представляет собой простую реализацию аннотированных методов @onMessage, @onOpen и @onClose.
Моя проблема в том, что когда я отправляю сообщение менее 25 символов из Arduino, оно будет получено на сервере, но все сообщения более 25 символов не принимаются.
Сервер Websocket работает с любым размером сообщения с использованием Tyrus реализация клиента java websocket. Что мне здесь не хватает?