Клиент передачи веб-сокетов Arduino и сервер обмена сообщениями Tyrus?

Я использую следующую функцию 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 websocket библиотека.

Мой код сервера 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. Что мне здесь не хватает?

0

Решение

Согласно Arduino-WebSocket документация поддерживает длину 65535 символов (16 бит), поэтому проблема не в клиентском коде Arduino-Websocket, а в чем-то связанном с сервером Tyrus.

Попробуйте создать веб-приложение в Tomcat 8, которое поддерживает Web Socket и подключиться к нему с помощью Arduino, и посмотрите. Я сделал это и не столкнулся с какими-либо проблемами.

0

Другие решения


По вопросам рекламы [email protected]