Java 为什么握手后我的插座会关闭?我该如何修复?
我正在尝试将一个网站连接到我的java插件(在minecraft中),让他们交流和播放音频。当我尝试发送连接的消息时。当插件启用时,服务器启动 代码: 当站点连接到插件时执行Java 为什么握手后我的插座会关闭?我该如何修复?,java,websocket,webserver,minecraft,Java,Websocket,Webserver,Minecraft,我正在尝试将一个网站连接到我的java插件(在minecraft中),让他们交流和播放音频。当我尝试发送连接的消息时。当插件启用时,服务器启动 代码: 当站点连接到插件时执行 Socket client = AudioServer.getServer().accept(); client.setKeepAlive(true); client.setTcpNoDelay(true); Buffered
Socket client = AudioServer.getServer().accept();
client.setKeepAlive(true);
client.setTcpNoDelay(true);
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter output = new PrintWriter(client.getOutputStream());
String line;
String key = "";
while (true) {
line = input.readLine();
if(line.startsWith("Sec-WebSocket-Key: ")) {
key = line.split(" ")[1];
}
if (line == null || line.isEmpty())
break;
}
output.println("HTTP/1.1 101 Switching Protocols");
output.println("Upgrade: websocket");
output.println("Connection: Upgrade");
output.println("Sec-WebSocket-Accept: " + encode(key));
output.println();
output.flush();
input.close();
AudioClient ac = new AudioClient(client);
public AudioClient(Socket client) {
try {
this.Client = client;
this.conn = false;
client.setKeepAlive(true);
client.setTcpNoDelay(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Thread t = new Thread(new AudioReceiver(this));
t.start();
this.sendData("connected");
}
控制台:
[10:06:34] [Thread-315/WARN]: java.net.SocketException: Socket is closed
[10:06:34] [Thread-315/WARN]: at java.net.Socket.setKeepAlive(Socket.java:1309)
[10:06:34] [Thread-315/WARN]: at ev.Audio.AudioClient.<init>(AudioClient.java:23)
[10:06:34] [Thread-315/WARN]: at ev.Audio.AudioConnection.run(AudioConnection.java:42)
[10:06:34] [Thread-315/WARN]: at java.lang.Thread.run(Thread.java:748)
[10:06:34] [Thread-315/WARN]: java.net.SocketException: Socket is closed
[10:06:34] [Thread-315/WARN]: at java.net.Socket.getOutputStream(Socket.java:943)
[10:06:34] [Thread-315/WARN]: at ev.Audio.AudioClient.sendData(AudioClient.java:42)
[10:06:34] [Thread-315/WARN]: at ev.Audio.AudioClient.<init>(AudioClient.java:33)
[10:06:34] [Thread-315/WARN]: at ev.Audio.AudioConnection.run(AudioConnection.java:42)
[10:06:34] [Thread-315/WARN]: at java.lang.Thread.run(Thread.java:748)
[10:06:34][Thread-315/WARN]:java.net.SocketException:套接字已关闭
[10:06:34][Thread-315/WARN]:位于java.net.Socket.setKeepAlive(Socket.java:1309)
[10:06:34][Thread-315/WARN]:在ev.Audio.AudioClient.(AudioClient.java:23)
[10:06:34][Thread-315/WARN]:在ev.Audio.AudioConnection.run(AudioConnection.java:42)
[10:06:34][Thread-315/WARN]:位于java.lang.Thread.run(Thread.java:748)
[10:06:34][Thread-315/WARN]:java.net.SocketException:套接字已关闭
[10:06:34][Thread-315/WARN]:位于java.net.Socket.getOutputStream(Socket.java:943)
[10:06:34][Thread-315/WARN]:在ev.Audio.AudioClient.sendData(AudioClient.java:42)
[10:06:34][Thread-315/WARN]:在ev.Audio.AudioClient.(AudioClient.java:33)
[10:06:34][Thread-315/WARN]:在ev.Audio.AudioConnection.run(AudioConnection.java:42)
[10:06:34][Thread-315/WARN]:位于java.lang.Thread.run(Thread.java:748)
使用input.close()关闭InputReader时代码>,您还可以关闭基础套接字连接
正如您所看到的,如果不关闭套接字,就无法关闭BufferedReader。您唯一的选择是将BufferedReader传递给您的AudioClient
,或者使用DataInputStream
/BufferedInputStream
从中读取数据。谢谢,它解决了这个问题!