安卓socket聊天,埠被佔用問題(二)
socket聊天程式碼入口:http://blog.csdn.net/u013638600/article/details/50328265
接下來是埠被佔用問題
控制檯顯示jvm什麼的,意思就是埠被佔用的,首先是手工方法,在dos裡用netstat -aon|findStr 8888,找到佔用埠的程序後,殺死它taskkill /pid **** /F(星號代表佔用埠的程序號)
那麼,如果你不想手工打程式碼,應該怎麼辦呢,這裡提供一種辦法:
思路:用java呼叫windows批處理
//批處理就是把一批dos命令放在.bat檔案一批一批執行
//在windows中可以用這個方法,但夠折騰的,不過在linux中直接一句命令就可以解決
批處理檔案內容如下:for /f "tokens=5 delims= " %%i in ('netstat -aon^|findStr 8888') do (taskkill /pid %%i /F) (8888可以改為其他埠號)
程式碼如下:
while(true){
try
{
Process process=Runtime.getRuntime().exec("cmd /c start c://Users//think//Desktop//test1.bat");?(用這個可以執行批處理)
process.waitFor(); //這段程式碼本來是讓該執行緒先執行再執行接下來的程式碼,但似乎沒什麼用,所以加了下一行程式碼)
Thread.sleep(5000); //1.先讓當前執行緒沉睡,給他足夠時間殺死埠被佔用的執行緒,並且防止一開啟ServerSocket成功,這個執行緒又把ServerSocket殺死
}catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
serverSocket=new ServerSocket(port);
break; //2.如果開啟埠不成功,進行迴圈(因為有可能在殺死佔用埠的程序後,又有別的程序佔領了埠
}
catch(Exception e)
{
System.out.print("錯誤");
}
}
至此,問題就解決了