Java socket客户端端口转发



我目前正在编写一个客户机-服务器java应用程序。我使用java套接字api将数据从客户机发送到服务器,反之亦然。服务器在windows上运行,端口为9001。客户端位于同一机器上的docker容器中。我必须在docker中绑定什么端口,以便docker容器中的客户端可以连接到服务器?

我已经尝试绑定服务器端口,这显然没有工作,因为它已经被服务器占用了。

客户端需要通过9001端口连接主机。

通常的方法是通过将--add-host=host.docker.internal:host-gateway作为参数添加到docker run命令中,将host-gateway添加为额外的主机。

然后客户端可以连接到您的服务器程序使用host.docker.internal作为主机名(和9001作为端口名)。

连接服务器的IP:9001。如果你试图从docker容器内部连接到localhost,它看起来就像连接到同一个容器一样。

当然,您的服务器进程需要监听IP:9001,而仅仅监听localhost:9001是不够的。

关于绑定:服务器打开一个端口用于侦听,这称为绑定。客户端打开一个端口用于发送(但此发送端口地址取自临时端口范围,因此不相关),并使用该端口连接到服务器端口。

参见:

  • https://docs.docker.com/network/
  • https://docs.docker.com/network/host/
  • https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

最新更新