繁体   English   中英

如何通过虚拟机连接到主机上的套接字服务器?

[英]How to connect to a socket server on the host machine via the virtual machine?

我做了端口转发:我把服务器放在虚拟机上,将客户端从主机连接到虚拟机。 那效果很好。

但是现在,当我尝试以相反的方向执行此操作时,它没有。

我做的第一件事是使用以下参数进行端口转发:

  • 主机端口:35001
  • 转发端口:35001
  • 虚拟机ip:192.168.40.130

它成功地完成了。

之后,当我这样做时(服务器脚本,但在主机上的 cmd (shell)上):

s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.bind(("0.0.0.0",35001))

我收到此错误:

  Only one usage of each socket address (protocol/network address/port) is normally permitted

我相信这是因为有一个进程在监听 35001 端口。

在我转发端口后,VMware(NAT) 正在侦听 35001(我使用 netstat 发现了这一点)。

那么如何在主机上做一个服务器,让它监听35001端口,并且能够从虚拟机连接到它呢?

它是 windows 10 pro、python3、windows 7 VM。 防火墙被禁用。 我不想使用桥接连接。

vmware portforwarding只是一个进程,由vmware服务创建,参数如下:

  • 它在您的主机上运行
  • 分配 TCP 端口 35001
  • 侦听传入的 TCP 连接
  • 将它们转发到您的访客机器 IP 的 TCP 35001

这就是它所做的,仅此而已。

当您开始端口转发时,此过程已启动并在您的主机上分配了 35001 TCP 端口。

这就是为什么您的 python 脚本在主机上不起作用的原因。 它无法再次分配您主机的 35001 TCP 端口。

VMware 创建一个虚拟网络。 您的虚拟机会看到此虚拟网络。 没有以太网卡属于它,但它看起来好像是。 它的 IP 地址范围为 192.168.40.0-192.168.40.255。 此外,您的主机位于此虚拟网络上,IP 可能为 192.168.40.1。 您的访客机器将其视为路由器。

这适用于仅主机、桥接或 NAT 虚拟网络类型。 虚拟网络类型仅影响您的主机如何处理数据包以在虚拟网络和物理网络之间转发它们。

要在您的主机上运行服务器,您可以从您的来宾连接什么,您不需要任何端口转发。 只需停止它,您的 python 脚本就会运行。 然后,从您的 guest 连接 192.168.40.1:35001

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM