是否可以通过 Activity 与客户沟通?我的意思是:
我已连接客户端、InputStreamReader
和 PrintWriter
in = new BufferedReader(new InputStreamReader(
client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
当我使用in.readLine()
时,服务器等待传入数据。但我有这样的情况:
- 客户端未发送任何数据
- 连接仍然有效
- 我需要向客户端发送一些数据(但
in.readLine()
仍在挂起进程)并等待响应
问题是:
处理异步传入数据的最佳方法是什么?我的意思是“事件”之类的东西。我应该创建一个用于读取的线程和另一个用于写入的线程吗?如果我可以在一个线程中完成它,您能给一个代码示例吗?
是否可以中止等待in.readLine()
?
最佳答案
Java 通过 java.nio
包 ( see here ) 提供非阻塞 I/O。但是 Java 的“nio” channel 不能与 java.io 中的流进行互操作。因此,如果您想使用 nio,则必须从监听器开始使用 nio 构建您的服务器。
如果您坚持使用现有的 java.io
流,那么您要么必须使用每个客户端线程模型;要么使用每个客户端线程模型。或者您需要设计一个系统,让单个线程(或线程池)通过重复循环、轮询 instream.available() 来管理一堆客户端。找出哪些数据已准备好处理。当然,在后一种情况下,您希望避免忙循环,因此 Thread.sleep 的一些适当使用可能也是有序的。
关于java - 如何在Java中使用套接字输入/输出流捕获 "event"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598261/