Почему клиент Dart IO Websocket отправляет неверные данные на сервер - PullRequest
0 голосов
/ 29 мая 2020

Согласно протоколу веб-сокета после первоначального рукопожатия первый бит в любом пакете веб-сокета должен быть равен 0, если у него есть другие пакеты данных, которые следует отслеживать, или 1, если он завершен.

Однако у меня возникают проблемы при отправке сообщение на мой сервер websocket от клиента dart.

Я отправляю только простое сообщение, содержащее «yo».

Иногда сообщение отправляется и обрабатывается успешно, но в большинстве случаев сообщение разбито на 2 пакета. Это не должно быть проблемой, но либо пакеты отправляются, и оба пакета содержат 1 в качестве первого бита. Или они отправляются в неправильном порядке: первый бит в первом пакете установлен в единицу, а первый бит во втором пакете установлен в ноль.

Сервер отлично отвечает при использовании клиентов websocket в chrome, firefox, mozilla и даже IE.

Я не уверен, делаю ли я очевидную ошибку, но я не знаю, как получить

import 'dart:convert';
import 'dart:io';
import 'dart:core';

void main() {
    var url = 'ws://localhost:8080';
    var quit = false;
    var input= null;

    WebSocket.connect(url, protocols: ['chat'])
        .then((WebSocket w) {
        if (w.readyState == WebSocket.open) {
            print("Connected");
            while (!quit) {
                print("Please enter a command");
                input = stdin.readLineSync(
                    encoding: Encoding.getByName("utf-8"));
                if (input == "quit") {
                    quit = true;
                    print("quitting program.... \nbye bye\n");
                    exit(0);
                }
                if (input == "close") {
                    w.close();
                } else {
                    w.add(input);
                }
            }
        }
    }).catchError((error) {
        print(error.toString());
    });
}

Вывод с сервера показывает два пакета, но второй пакет должен быть тем, который был отправлен первым

enter image description here

Это работает во всех основных браузерах, поэтому я не могу понять, что не так с клиентом Dart.

Любая помощь приветствуется.

Заранее спасибо

...