1. 程式人生 > >安卓socket聊天,埠被佔用問題(二)

安卓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("錯誤");
   }

}

至此,問題就解決了