1. 程式人生 > >Socket關閉後端口仍然佔用導致無法建立新的連線

Socket關閉後端口仍然佔用導致無法建立新的連線

目的:研究生高階計算機網路課程大作業--實現DV演算法的router編寫(JAVA)

問題描述:

      使用UDP協議進行通訊,好不容易使執行緒Thread安全地關閉,卻無法再次獲取 同一個(IP,Port) 上的連線。

      關於執行緒的安全終止這裡再說兩句,stop(), interrupt() ,destroy() 都是被廢棄的、不安全的,最好讓執行緒自動執行完畢。作者這裡是通過直接向socket發出stop命令 實現的,阻塞的執行緒受到stop命令後設置 stop = true 然後可結束執行緒。

解決辦法:

      呼叫 socket.close() 之後必須呼叫 serversocket.close()

,這是因為socket對server發出斷開連線請求時,只有在server回覆ACK 後socket才會真正地釋放連線,否則就會一直佔用埠,導致無法重新建立連線,所以server也需要關閉。

      部分程式碼如下:(關鍵在t.close()和l.close()