我正在爲TCP通信創建一個套接字,並且想知道如何指定源端口。指定套接字上的源和目標端口
Socket socket = new Socket();
socket.connect(dstAddress);
我正在爲TCP通信創建一個套接字,並且想知道如何指定源端口。指定套接字上的源和目標端口
Socket socket = new Socket();
socket.connect(dstAddress);
從the doc:
Socket(InetAddress address, int port)
創建一個流套接字,並在指定的IP地址連接到指定的端口號 。
您的客戶端端口將自動分配。你不必擔心這一點。你只需要指定你連接的服務器端口。查看the Oracle socket tutorial,特別是編寫客戶端的部分。
是的,但我想指定客戶端端口。那是我不知道該怎麼做的。我嘗試了綁定方法,但它引發了一個異常,表示套接字已經綁定。 – wotan2009 2011-06-06 14:05:46
Socket有多個構造函數。嘗試this一個
您必須使用InetSocketAddress,在包java.net中聲明。使用它最簡單的方法是:
的InetSocketAddress(主機,端口)),像這樣:
Socket socket = new Socket();
socket.connect(new InetSocketAddress("http://myserver.com", 80));
其中連接到Web服務器監聽myserver.com端口80上。
這不是他問的。 – 2012-04-27 08:34:39
創建新套接字後,請使用您要使用的本地端口號撥打bind()
,然後連接到遠程主機。
@EJP是正確的,但。不要輕易做這件事,因爲如果其他事情恰好在使用該端口,或者即使您的程序最近使用過並關閉了它,最終也無法創建套接字。
如果不起作用,您可能需要查看您正在使用的庫。
這通常是一個非常糟糕的主意。它限制您每次到該目標的一個出站連接,以及連續連接之間的兩分鐘。如果這是出站防火牆規則的動機,它應該被刪除,netadmin被重新教育。出站端口規則不會增加防火牆的安全性。 – EJP 2011-06-06 19:10:04
是否在調用'connect()'之前或之後調用'bind()'來設置src地址? – 2011-06-06 20:39:12
首先,我在bind()之前連接了(),它引發異常,然後我做了相反的事情,bind()然後connect()並且它工作,但客戶端端口仍然自動分配。這不是我通過綁定地址的端口 – wotan2009 2011-06-07 06:13:29