簡體   English   中英

如何在沒有Java中的java.net.BindException的情況下偵聽localhost中的兩個端口?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM