java - DataInputStream readByte 阻塞/挂起

标签 java sockets

我正在查看创建线程来处理每个传入连接的服务器的代码。问题是由于某种原因在一堆线程上,从套接字创建的 DataInputStream 卡在 readByte 上并且没有抛出任何异常。超时设置为 60 秒,所以我不确定下一步是什么。

socket.setSoTimeout(timeout);
socketInputStream = socket.getInputStream();
byte connectionOptions = socketDataInputStream.readByte();

最佳答案

您在评论中指出您正在等待 SocketException。如果是这样,您需要改为捕获 SocketTimeoutException。例如,如果您 telnet 到端口 3434 并等待 3 秒,此代码将输出 timeout!:

try {
    ServerSocket ss = new ServerSocket(3434);
    Socket socket = ss.accept();
    socket.setSoTimeout(3000);
    InputStream socketInputStream = socket.getInputStream();
    DataInputStream dataInputStream = new DataInputStream(socketInputStream);
    dataInputStream.readByte();
} catch (SocketTimeoutException e) {
    System.out.println("timeout!");
}       

关于java - DataInputStream readByte 阻塞/挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337272/

相关文章:

java - MySql 选择语句失败

python try except in socket 不工作

python从 friend 那里接收数据

java - 忽略责备结果,因为提供程序返回了 120 个责备行,但文件 some.java 对于 CVS Sonar 有​​ 226 行

java - 在 Eclipse (3.7) 中调试时检查对象数据

java - Java中的多重加密技术

java - 如何在 JSP 中导入我的导入?

linux - 内核中的 sock_create()

sockets - 为什么在从 Unix 套接字读取时使用 netcat 发送 ^D 不会触发 EOF?

java - 通过在 Java DatagramSocket 中禁用 SO_RCVBUF 来读取最新的 UDP 数据包?