Java 在套接字上指定源端口和目标端口

Java 在套接字上指定源端口和目标端口,java,sockets,tcp,Java,Sockets,Tcp,我正在为TCP通信创建一个套接字,想知道如何指定源端口 Socket socket = new Socket(); socket.connect(dstAddress); 发件人: 创建流套接字并将其连接到指定端口 指定IP地址上的数字 您的客户端端口将自动分配。你不必为此担心。您只需要指定要连接的服务器端端口。请查看,特别是关于编写客户机的部分。Socket有多个构造函数。尝试一个您必须使用包java.net中声明的InetSocketAddress。最简单的使用方法是: InetSocke

我正在为TCP通信创建一个套接字,想知道如何指定源端口

Socket socket = new Socket();
socket.connect(dstAddress);
发件人:

创建流套接字并将其连接到指定端口 指定IP地址上的数字


您的客户端端口将自动分配。你不必为此担心。您只需要指定要连接的服务器端端口。请查看,特别是关于编写客户机的部分。

Socket有多个构造函数。尝试一个

您必须使用包java.net中声明的InetSocketAddress。最简单的使用方法是:

InetSocketAddress(主机、端口)),类似以下内容:

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

连接到myserver.com中侦听端口80的web服务器。

创建新套接字后,使用要使用的本地端口号调用
bind()
,然后连接到远程主机

@不过,EJP是正确的。不要轻率地这样做,因为如果发生其他事情正在使用该端口,或者即使您的程序最近使用并关闭了该端口,您也可能无法创建套接字


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

是,但我也想指定客户端端口。这就是我不知道该怎么做的。我尝试使用bind方法,但它抛出一个异常,表示套接字已经绑定。这通常是一个非常糟糕的主意。它将您一次到该目标的出站连接限制为一个,连续连接之间的间隔限制为两分钟。如果这是由出站防火墙规则引起的,则应将其删除并重新教育netadmin。出站端口规则不会向防火墙安全性添加任何内容。您是否在调用
connect()
之前或之后调用了
bind()
来设置src地址?首先,我在bind()之前执行了connect(),它引发了异常,然后我执行了相反的操作,bind()然后connect(),它工作了,但客户端端口仍然是自动分配的。这不是我在绑定地址中通过的端口,我认为这是有原因的。源端口是TCP/IP堆栈的标识,用于识别当前正在处理的连接。当您将connect()连接到执行作业X时,堆栈会为您分配一个端口PPP,如果您成功地将此端口绑定到执行作业Y,则假设有一个传入连接正在寻找端口PPP,堆栈如何知道此连接是用于作业X或Y的?因为在整个系统中扫描所有不可用的端口(侦听端口)会很疯狂,所以系统会为您分配源端口,并确保它是唯一的。
Socket socket = new Socket();
socket.connect(new InetSocketAddress("http://myserver.com", 80));