我正在为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