gpt4 book ai didi

java - 仅当数据可用时才从套接字读取

转载 作者:行者123 更新时间:2023-12-01 09:13:32 25 4
gpt4 key购买 nike

我有一个服务器应用程序,在与客户端通信时,它从客户端读取输入并将其发送到客户端。目前我正在使用 DataInputStream.read() 方法从客户端读取数据,但是此方法会阻塞该过程。如果没有数据进入,则该过程只是等待并且不会继续。这是我在客户端连接时创建的类的代码:

public class Client implements Runnable{
private SSLSocket threadSocket;
private boolean running = true;
private DataOutputStream out;
private int nPort = 0;

//This constructor will be passed the socket
public ClientThread_control(SSLSocket socket, int port){
threadSocket = socket;
nPort = port;
}

public void run(){
System.out.println("New connection at " + new Date() + "\n");
try {
DataInputStream in = new DataInputStream (threadSocket.getInputStream());
out = new DataOutputStream (threadSocket.getOutputStream());
while (running){
// read input data
byte[] one = new byte [1];
in.read(one);
int ln = in.available();
// do some stuff
// parse in going message
messageParsing(msg);

// do some stuff ....

// go to sleep
Thread.sleep(1000);
}
}
catch (IOException ex) {ex.printStackTrace();}
catch (InterruptedException ex) {ex.printStackTrace();}
finally {
try {
threadSocket.close();
System.out.println("Connection closed.\n");
} catch (IOException ex) {ex.printStackTrace();}
}
}}

当没有可用数据时,它不会越过 in.read(one) 行。我的问题是,我现在可以知道是否有数据吗?如果没有,则跳过这一部分并继续执行做一些事情部分?如果没有办法,这意味着客户端应该始终发送一些内容以使服务器应用程序继续顺利运行?

如有任何帮助,我们将不胜感激,谢谢。

最佳答案

int ln = in.available();

在您描述的情况下,ln 将为零,您应该对此进行测试并适当处理。

然而,这是处理阻塞 I/O 的一种糟糕方法。正常的方法是专用一个线程来读取套接字并处理到达它的任何内容。

如果您不希望这样,您应该使用非阻塞 NIO,或异步 I/O。

关于java - 仅当数据可用时才从套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com