[英]How to listen to two ports in localhost without java.net.BindException in Java?
我編寫了一個程序,使兩個線程都包含偵聽兩個不同端口的ServerSocket
對象,並等待while循環中的accept()
,在運行它之后,啟動這些線程之一不會導致Exception
,但是當啟動另一個線程時,我得到如下的java.net.BindException
:
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.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at ListeningThread.run(ListeningThread.java:18)
我曾兩次使用不同的端口,但沒有用,請幫助我解決此問題。 我感謝您的幫助。
我曾兩次使用不同的端口,但沒有用,請幫助我解決此問題。
如果最近使用端口,即使沒有當前使用的端口,也無法設置SO_REUSEADDR(使用socket.setReuseAddress(true)
)會導致綁定失敗。
另一種可能是代碼中的邏輯錯誤,導致該代碼對兩個線程使用相同的端口。 在這種情況下,您應該添加一條跟蹤,以打印將要綁定的端口。
感謝您的答復,我僅通過在啟動兩個線程之間添加Thread.sleep()
來解決了該問題,即使推遲了1毫秒,我仍然無法弄清楚問題出在哪里。
new ListeningThread(this, 6666).start();
Thread.sleep(1);
new ListeningThread(this, 7777).start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.