首页 > 解决方案 > Java 和 Dart 之间如何通过 Socket 进行通信

问题描述

我想运行可以相互通信的 Dart 和 Java 代码的组合。因此我选择使用套接字,服务器套接字用 Java 编写,客户端套接字用 Dart 编写。

这是我写的代码:

服务器

ServerSocket server = new ServerSocket(12345);
server.setSoTimeout(0);        
System.out.println("waiting for connection...");

while (true) {
    try {
        Socket client = socket.accept();
        DataInputStream input = new DataInputStream(client.getInputStream());
        DataOutputStream output = new DataOutputStream(client.getOutputStream());
        System.out.println("connected to " + client.getLocalSocketAddress() + ".");

        while (true) {
            output.write(input.readLine());
        }
    } catch (IOException e) {
        System.out.println("disconnected.\n\nwaiting for connection...");
    }
}

客户

Socket client = await Socket.connect('localhost', 12345);
client.write('hello there\n');
client.close();

不幸的是,服务器没有收到客户端发送的 ping 消息。到目前为止,我认为问题在于 Dart 代码,因为在执行用 Java 编写的客户端时工作得很好。

你知道,如何解决这个问题吗?如果是这样,请告诉我嗬。先感谢您!


请注意:

由于一次不会有超过一个客户,我选择采用这种方法。我知道,通常这不是好的风格。

标签: javasocketsdart

解决方案


close()在Socket 类的文档中:

注意:对 IOSink 的写入可能会被缓冲,并且可能不会通过调用 close() 来刷新。要刷新所有缓冲的写入,请在调用 close() 之前调用 flush()。

https://api.dart.dev/stable/2.7.1/dart-io/Socket/close.html


推荐阅读