2011-06-06 50 views
0

我正在爲TCP通信創建一個套接字,並且想知道如何指定源端口。指定套接字上的源和目標端口

Socket socket = new Socket(); 
socket.connect(dstAddress); 
+2

這通常是一個非常糟糕的主意。它限制您每次到該目標的一個出站連接,以及連續連接之間的兩分鐘。如果這是出站防火牆規則的動機,它應該被刪除,netadmin被重新教育。出站端口規則不會增加防火牆的安全性。 – EJP 2011-06-06 19:10:04

+0

是否在調用'connect()'之前或之後調用'bind()'來設置src地址? – 2011-06-06 20:39:12

+0

首先,我在bind()之前連接了(),它引發異常,然後我做了相反的事情,bind()然後connect()並且它工作,但客戶端端口仍然自動分配。這不是我通過綁定地址的端口 – wotan2009 2011-06-07 06:13:29

回答

0

the doc

Socket(InetAddress address, int port) 

創建一個流套接字,並在指定的IP地址連接到指定的端口號 。

您的客戶端端口將自動分配。你不必擔心這一點。你只需要指定你連接的服務器端口。查看the Oracle socket tutorial,特別是編寫客戶端的部分。

+2

是的,但我想指定客戶端端口。那是我不知道該怎麼做的。我嘗試了綁定方法,但它引發了一個異常,表示套接字已經綁定。 – wotan2009 2011-06-06 14:05:46

0

Socket有多個構造函數。嘗試this一個

-1

您必須使用InetSocketAddress,在包java.net中聲明。使用它最簡單的方法是:

的InetSocketAddress(主機,端口)),像這樣:

Socket socket = new Socket(); 
socket.connect(new InetSocketAddress("http://myserver.com", 80)); 

其中連接到Web服務器監聽myserver.com端口80上。

+1

這不是他問的。 – 2012-04-27 08:34:39

1

創建新套接字後,請使用您要使用的本地端口號撥打bind(),然後連接到遠程主機。

@EJP是正確的,但。不要輕易做這件事,因爲如果其他事情恰好在使用該端口,或者即使您的程序最近使用過並關閉了它,最終也無法創建套接字。

如果不起作用,您可能需要查看您正在使用的庫。