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问题解决---->>