gpt4 book ai didi

Java 套接字卡住

转载 作者:行者123 更新时间:2023-12-01 14:36:23 26 4
gpt4 key购买 nike

我有一个服务器客户端程序,但我希望能够从服务器发送回客户端请求数据。在注释的代码中,如果我启用了该功能,则 Sender.send 仅发送一次,之后什么也不会发生。但如果我禁用它,一切正常。不确定我在注释代码中做错了什么。

private class Client extends Thread {

private Socket socket;
private boolean running;

public Client(Socket socket) {
this.socket = socket;
this.running = true;
if (!(clients.contains(socket))) {
clients.add(socket.getInetAddress().toString());
}
}

private void delete() {
running = false;
try {
log("Client disconnected: (" + socket.getInetAddress().toString().replace("/", "") + ":" + socket.getPort() + ")");
clients.remove(socket.getInetAddress().toString());
socket.close();
} catch (IOException e) {
}
try {
interrupt();
join();
} catch (Exception e) {
}
}

public void run() {
log("Client connected: (" + socket.getInetAddress().toString().replace("/", "") + ":" + socket.getPort() + ")");
try {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while (running) {
if (!Sender.send(oos)) {
delete();
return;
}

try {
Object object = ois.readObject();

if (object instanceof String[] && ((String[]) object)[0].equals("COMMAND_REQUEST")) {
String command = ((String[]) object)[1].trim();
log("Executed command request: " + command);
Sender.log("Executed command request: " + command);
Bukkit.getServer().dispatchCommand(getServer().getConsoleSender(), command);
}

} catch (Exception e) {
}

Thread.sleep(300);
}
} catch (Exception e) {
delete();
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}

}

发送方式:

protected static boolean send(ObjectOutputStream oos) {
try {
update();
oos.writeObject(data);
oos.flush();
return true;
} catch (Exception e) {
return false;
}
}

最佳答案

It works all fine

不,没有。当套接字和缓冲区都填满时,发布的这段代码最终将导致死锁。

除非将所有代码更改为在套接字的生命周期中使用单个 ObjectInputStream 和 ObjectOutputStream,否则注释掉的代码不可能工作。

我想补充一点,你在这里问了错误的问题。问题是为什么注释掉的代码不起作用,而你未能提供的信息是抛出的异常。

关于Java 套接字卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455181/

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