java - Java和Dart之间如何通过Socket进行通信

标签 java sockets dart

我想运行 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 编写的客户端时效果很好。

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

<小时/>

请注意:

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

最佳答案

在 Socket 类的 close() 文档中:

NOTE: Writes to the IOSink may be buffered, and may not be flushed by a call to close(). To flush all buffered writes, call flush() before calling close().

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

关于java - Java和Dart之间如何通过Socket进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009388/

相关文章:

java - 如何在for循环中动态调用Java Bean的方法

java - 通过套接字传输 byte[]

c++ - async_write 中的操作取消错误

UTC中的DateTime不转换为Local

java - JNI_CreateJavaVM函数方法不起作用,无法调试

java - CAS 服务 ACL

java - Ant Javac 和 Commandline Javac 给出不同的结果

javascript - 类型错误 : Converting circular structure to JSON

flutter - 不需要的容器,但我需要这个容器? flutter/Dart

objective-c - 如何在 Dart 中记录当前函数名称?