java - 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 编写的客户端时工作得很好。
你知道,如何解决这个问题吗?如果是这样,请告诉我嗬。先感谢您!
请注意:
由于一次不会有超过一个客户,我选择采用这种方法。我知道,通常这不是好的风格。
解决方案
close()
在Socket 类的文档中:
注意:对 IOSink 的写入可能会被缓冲,并且可能不会通过调用 close() 来刷新。要刷新所有缓冲的写入,请在调用 close() 之前调用 flush()。
推荐阅读
- javascript - 使用单引号时出现双引号
- git - Gerrit Rest API - Gitiles 插件:获取提交详细信息,提交文件列表
- java - 什么是复选框的网络元素(基于文本的 HTML)
- regex - 在其他单元格包含值的工作表中查找最后一个值
- java - 如何在长按列表视图中更新和删除数据
- javascript - 如何将带有 contenteditable 列的表保存到本地存储中
- javascript - 如何在自定义组件中使用离子刷新器
- sql-server - 批量插入、无效对象错误(表名)、Excel VBA 到 SQL Server
- java - 在应用程序类中注册时广播接收器泄漏的风险
- python - 如何使用正确的数据库参考设置 Flask-Migrate?