dart 如何在Flutter应用程序中使用Socket?

3phpmpom  于 2023-10-13  发布在  Flutter
关注(0)|答案(2)|浏览(158)

我试图通过TCP套接字连接到设备,从套接字写入数据并读取响应。我用C#做了一个简单的测试,它和预期的一样工作。C#代码,运行良好:

using (TcpClient client = new TcpClient(terminal.server_IP, terminal.port))
        {
            try
            {
                using (NetworkStream stream = client.GetStream())
                {
                    try
                    {
                        stream.ReadTimeout = 5000;

                        byte[] msg = new byte[10];
                        msg[0] = 1;
                        msg[1] = 1;
                        msg[2] = 0;
                        msg[3] = 5;
                        msg[4] = 70;
                        msg[5] = 82;
                        msg[6] = 82;
                        msg[7] = 84;
                        msg[8] = 67;
                        msg[9] = 81;

                        stream.Write(msg, 0, msg.Length);

                        int i = 0;
                        while (!stream.DataAvailable && i < 5)
                        {
                            await Task.Delay(100);
                            i++;
                        }

                        byte[] data = new byte[4096];
                        int bytes = stream.Read(data, 0, data.Length);
                        msg = new byte[bytes];
                        string tst = Encoding.GetEncoding("Windows-1250").GetString(data, 2, data[1]);
                    }
                    finally
                    {
                        stream.Close();
                    }
                }
            }
            finally
            {
                client.Close();
            }
        }

我需要把它转换成一个flutter应用程序,我做了代码,数据不会回来听。Flutter代码:

try {
  socket?.destroy();
  socket = await Socket.connect(serverIP, serverPort).catchError((error) {
    print('error $e');
  });

  socket!.listen((data) {
    print('data');
  }, onError: (e) {
    print('error');
    socket!.destroy();
  }, onDone: () {
    print('done');
    socket!.destroy();
  }, cancelOnError: false);

  List<int> message = [1, 1, 0, 5, 70, 82, 82, 84, 67, 81];
  socket!.write(message);
} catch (e) {
  print('errors: $e');
}

它不抛出任何错误,一切运行,但我不能从设备读取数据.有什么建议我做错了吗?

z9zf31ra

z9zf31ra1#

我不确定这对你是否有用,但也许有用。
我之前试着在一个flutter应用程序中集成Web Socket,知道后端是用laravel做的,唯一对我有用的包是web_socket_channel。我希望它工作

cetgtptt

cetgtptt2#

所以,经过几天的捆绑,我认为问题是sthe socket!.write(message)。我用socket!.add(message);替换了它,它没有像预期的那样工作。
把它留在这里作为证据,为将来有同样问题的人节省保存时间。

相关问题