java - 从 Java 中的客户端套接字读取数据

标签 java sockets

我已经编写了从客户端套接字发送/接收数据的代码。发送数据步骤已成功完成,但是当我想从套接字读取数据时,readLine() 方法在没有数据可读时阻塞程序。

这是我的代码:

StringBuffer document = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
     document.append(line + "\n");
reader.close()

谢谢大家 我可以读取所有接收到的数据,但是 readLine 或 read(byte[], int, int) 方法在没有数据可读时会阻塞程序,而此时此方法必须返回 null/-1。

最佳答案

那是因为readLine()函数是阻塞调用,当然要阻塞了。

为了更有建设性,对像 readLine() 这样的方法的调用应该在一个单独的线程中,这样阻塞调用就不会影响您的代码的其余部分。从正在阅读的类(class)中,我建议创建一个线程来纯粹控制从套接字中读取。

我会传递一个对创建类的引用,这样如果线程接收到信息,父类就可以使用它。

关于java - 从 Java 中的客户端套接字读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11390847/

相关文章:

java - 对 JAXB 对象的 XPath 1.0 查询?

java - 忽略查询中的区分大小写和空格

c# - Azure Web 角色是否旨在托管永久打开的 TCP 连接?

python - python 中的 socket.gethostbyname(hostname) 有超时值吗?

python - 在Windows上的python中发送原始套接字时出错

c - receive() read() 和 send() 无需等待

java - 如何定义在 Intellij 中运行 junit 测试的顺序?

java - 如何在方向更改时保留幻灯片的特定文本?

java - 使用 libgdx 通过 Eclipse 导出可运行的 .jar 文件

ios - 我如何在 iOS 中激活蜂窝 radio ,因为 bsd-sockets 不会自动激活它