2011-06-06 53 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是正确的,但。不要轻易做这件事,因为如果其他事情恰好在使用该端口,或者即使您的程序最近使用过并关闭了它,最终也无法创建套接字。

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