Java Socket 客户端使用指定端口多次连接服务器引发 BindException
生活随笔
收集整理的這篇文章主要介紹了
Java Socket 客户端使用指定端口多次连接服务器引发 BindException
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有這樣一個需求,客戶端要用特定端口連接服務器,可以用bind方法綁定一個本地的InetAddress,第一次連接是ok的,但是第二次連接就會報 BindException 異常(Bind: Address Already in Use),是因為之前那個連接處于 TIME_WAIT 狀態.
java.net.BindException: 地址已在使用 (Bind failed)解決方法是調用 setReuseAddress 或 setOption 方法,設置地址復用,下面附上demo
import java.io.IOException; import java.net.*;public class ReusePortClient {public static void main(String[] args) throws UnknownHostException {SocketAddress socketAddress = new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 6000);for (int i = 0; i < 100; i++) {try {Socket socket = new Socket();InetSocketAddress inetSocketAddress = new InetSocketAddress(InetAddress.getByName("localhost"), 12345);socket.setReuseAddress(true); // 方法一,安卓開發也可以用// socket.setOption(StandardSocketOptions.SO_REUSEADDR, true); // 方法二// socket.setOption(StandardSocketOptions.SO_REUSEPORT, true); // 方法三socket.bind(inetSocketAddress);socket.connect(socketAddress);socket.close();Thread.sleep(1000);} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Java Socket 客户端使用指定端口多次连接服务器引发 BindException的全部內容,希望文章能夠幫你解決所遇到的問題。