在java中断开与套接字的连接
嗨 我正在构建一个小型p2p程序,实现服务器端和客户端。 当我使用客户端程序时,首先想到的是连接到列表中的每台服务器,发送数据(关于客户端)并断开连接。下次客户端连接到其中一台服务器时,它将被识别 我的问题-当我告诉客户端断开连接时,我得到了这个异常在java中断开与套接字的连接,java,sockets,Java,Sockets,嗨 我正在构建一个小型p2p程序,实现服务器端和客户端。 当我使用客户端程序时,首先想到的是连接到列表中的每台服务器,发送数据(关于客户端)并断开连接。下次客户端连接到其中一台服务器时,它将被识别 我的问题-当我告诉客户端断开连接时,我得到了这个异常 java.io.EOFException at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at oop.ex3.nameserver.NameServerThread.run(NameServerThread.java:24)
为了断开连接,我刚刚写道:
finally {
out.close();
in.close();
socket.close();
}
那么,我如何避免这个例外呢?谢谢 JavaDoc for Socket.close()清楚地说明: 关闭此套接字也将关闭 套接字的InputStream和 输出流
这将抛出异常,因为您已经关闭了它们 关闭客户端时,服务器端会发生什么 为了避免此异常,您需要实现自己的readUnsignedShort()方法,如
public int readUnsignedShort() {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
// don't throw new EOFException();
return -1; // EOF marker.
return (ch1 << 8) + (ch2 << 0);
}
public int readUnsignedShort(){
int ch1=in.read();
int ch2=in.read();
如果((ch1 | ch2)<0)
//不要抛出新的EOFEException();
return-1;//EOF标记。
return(ch1在关闭输出流之前进行刷新是否正确?:
finally {
//this is the DataOutputStream
if(dout != null){
dout.flush();
dout.close();
}
//and this the OutputStream
if(out != null){
out.flush();
out.close();
}
if (din != null){
din.close();
}
if (in != null){
in.close();
}
if (socket != null){
socket.close();
}
}
嗯,你有没有想过如果任何一个close()
语句抛出异常会发生什么?