java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at practice9.Server.main(Server.java:19)
Exception in thread "Thread-0" java.lang.NullPointerException
at practice9.Server.lambda$0(Server.java:29)
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at practice9.Server.main(Server.java:19)
Exception in thread "Thread-0" java.lang.NullPointerException
at practice9.Server.lambda$0(Server.java:29)
at java.lang.Thread.run(Thread.java:748)
问题:现后启动服务端和客户端并进行通讯,发现没有什么问题,可是当我关闭之后想重新打开时发生了错误,
这个时候有一个粗笨的方案,就是重启eclipse,但这样真的不太好啊..------>>
来源:用ServerScoket进行服务端和客户端通讯的时候出现的----->>
错误名称:地址(端口)已经在使用------>>
分析:先看我的关键代码------->>
public class Server { private static ServerSocket ss; private static Socket so; private static DataInputStream dis; private static DataOutputStream dos; public static void main(String[] args) { // TODO Auto-generated method stub try { ss = new ServerSocket(1000); so = ss.accept(); System.out.println("Conneted successfully"); dis = new DataInputStream(so.getInputStream()); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } new Thread(()->{ try { dos = new DataOutputStream(so.getOutputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } while(true) { try { String str = dis.readUTF(); str = str.toUpperCase(); dos.writeUTF(str); } catch (IOException e) { // TODO Auto-generated catch block try { dis.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }).start(); }
首先我猜测是不是我里面有一个线程在程序关闭的时候没有停止------??
于是我把线程注释掉,重启,还是有问题,原假设排除-------->>
然后看到我前面有一个ServerSocket时static 的,难道就是因为时静态的------??
于是把他改一下-------->>
public class Server { // private static ServerSocket ss; private static Socket so; private static DataInputStream dis; private static DataOutputStream dos; public static void main(String[] args) { // TODO Auto-generated method stub try { ServerSocket ss = new ServerSocket(1000); so = ss.accept(); System.out.println("Conneted successfully"); dis = new DataInputStream(so.getInputStream()); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } new Thread(()->{ try { dos = new DataOutputStream(so.getOutputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } while(true) { try { String str = dis.readUTF(); str = str.toUpperCase(); dos.writeUTF(str); } catch (IOException e) { // TODO Auto-generated catch block try { dis.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }).start(); }
重启,OK问题解决---->>