Dart 客户端套接字连接但不向服务器发送数据?

时间:2021-05-08 09:53:29

标签: sockets dart

我有一台运行在 Raspberry Pi 上的服务器,可通过浏览器访问。

http://192.168.1.67:55XXX/?email=a@b.com

产量:-

{Order=[{no=0, day_0=1, price=0, name=PPAC SUPERTHERM 20K, display_colour=blue, notice=1, special_order=false}, {no=1, day_0=1, price=0, name=SLACK 50KG , display_colour=blue, notice=1, special_order=false}, {no=0, day_0=1, price=0, name=PPAC SUPERTHERM 20K, display_colour=blue, day_5=1, notice=1, special_order=false, day_3=1}, {no=1, day_0=1, price=0, name=SLACK 50KG , display_colour=blue, day_5=1, notice=1, special_order=false, day_3=1}], Details={address=xx Farriers Lea, phone=0xxxx 606635, name=Fred Bloggs, mobile=, details=end shed on drive, email=a@b.com}} 

我正在使用 VSCODE 调试 dart 代码。 我的飞镖代码:-

String remote_ip = '192.168.1.67'; //212.159.118.177';
var remote_port = 55XXX;
Socket socket;
String _dataToBeSent = "http://?email=a@b.com\n";
var reply;

//  connect

main(List<String> arguments) async {
  await _remoteServerConnect();
}

// REMOTE SERVER  CONNECT
Future _remoteServerConnect() async {
// await Socket.connect(remote_ip, remote_port).then((Socket sock){
  await Socket.connect(remote_ip, remote_port).then((Socket sock) {
    socket = sock;
    print('Got connected ${socket.remoteAddress}');
    socket.listen(dataHandler,
        onError: errorHandler, onDone: doneHandler, cancelOnError: false);
  }).catchError((AsyncError e) {
    print("Unable to connect: $e");
    exit(1);
  });
}

void dataHandler(data) async {
  await print('"'+String.fromCharCodes(data).trim()+'"');
  if (String.fromCharCodes(data).trim().endsWith('html')) {
    print("Send Data = $_dataToBeSent");
    socket.add(utf8.encode(_dataToBeSent));
    // socket.writeln(_dataToBeSent);
    socket.flush();
    await Future.delayed(Duration(seconds: 5));
  }
}

void errorHandler(error, StackTrace trace) {
  print(error);
}

void doneHandler() {
  // socket.destroy();
  exit(0);
}

dart 调试控制台产生:-

Connecting to VM Service at ws://127.0.0.1:54799/kE9Xa1JQclk=/ws
Got connected InternetAddress('192.168.1.67', IPv4)
"HTTP/1.1 200 OK"              <sent by server
"ContentType: text/html"       <sent by server
Send Data = http://?email=a@b.com

Exited

服务器控制台产生:-

Server is ready
WEB Client connected: /192.168.1.66
         05.08/10:34:21.17 - Waiting for command..
         05.08/10:34:31.80 - Socket Timeout
         05.08/10:34:31.82 - Done ------------- 
05.08/10:34:31.82 - Waiting for command..
Connection has been closed
Server is ready

好像是

    socket.add(utf8.encode(_dataToBeSent));
    // socket.writeln(_dataToBeSent);
    socket.flush();

没有向服务器发送数据??为什么??感谢您收到任何想法!

禁用我的开发机器防火墙并没有改善答案!

史蒂夫

1 个答案:

答案 0 :(得分:0)

使用的服务器

final DataInputStream in = new DataInputStream(clientSocket.getInputStream());
                while (estimatedTime < 60000) {
                    report("Waiting for command..");

                    try {
                        // in.readNBytes(command.data, 0, command.length);
                        in.readFully(command.data);

接收数据 command.data 是 100bytes 长所以正在等待完整的输入。我填充到 100 字节工作正常 - 稍后会排序更好的解决方案。