java 监听客户端的退出_Java ServerSocket 手动关闭监听
今天練習(xí)Java Socket用法的示例代碼,發(fā)現(xiàn)一些問題
服務(wù)器代碼:
import java.net.*;
import java.io.*;
public class Test_Socket {
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
ServerSocket ss =new ServerSocket (30001);
while(true)
{
Socket s = ss.accept();
PrintStream ps = new PrintStream (s.getOutputStream());
ps.print("hello");
ps.close();
s.close();
}
}
}
客戶端代碼:
import java.io.*;
import java.net.*;
public class Test_Socket_Client {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
Socket s = new Socket("127.0.0.1",30001);
BufferedReader br= new BufferedReader(new InputStreamReader(s.getInputStream()));
String temp = br.readLine();
System.out.println(temp);
br.close();
s.close();
}
}
先執(zhí)行服務(wù)器代碼,再執(zhí)行客戶端代碼。
但是當(dāng)我修改服務(wù)器代碼,同時企圖再次執(zhí)行服務(wù)器代碼的時候,發(fā)生了一下的異常:
Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.(Unknown Source)
at java.net.ServerSocket.(Unknown Source)
at Test_Socket.main(Test_Socket.java:7)
也就是說,我的程序企圖使用一個已經(jīng)被使用過的端口,
問題出在服務(wù)器的程序一直沒有關(guān)閉端口!
那么問題來了,既然打開了端口并一直監(jiān)聽,那么如何手動關(guān)閉對那個原先運行著的進程呢?
------------------下述部分來自百度
解法:
用 cmd.exe 程序來輸入命令:
找到了的話:
正常的情況下,如果你的程序真的已經(jīng)退出了,那個端口就會自動被操作系統(tǒng)釋放的,很可能你的程序還沒有退出,只是隱藏了。
舉例,假如 tomcat 啟動了之后:
得到 tomcat 進程號PID是 6435,再來:
總結(jié)
以上是生活随笔為你收集整理的java 监听客户端的退出_Java ServerSocket 手动关闭监听的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 数组用字符做下表_JAVA字符
- 下一篇: 【leetcode】104. Maxim