两台电脑上的虚拟机实现通讯

本文详细介绍了Vmware虚拟机的三种网络连接模式:桥接模式、Host-only模式和NAT模式,重点讲解了如何配置桥接模式,使虚拟机能够与局域网中的其他机器互联互通。通过具体步骤指导如何在Ubuntu 16.04系统中配置IP地址、重启网关及解决常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一般装完Vmware虚拟机都需要与局域网中其他机器互联互通,在安装虚拟机的时候就要先考虑好用哪种模式进行连接。Vmware支持3种网络连接模式,我们先简单介绍一下3种模式然后再说具体的配置。

一、3种连接模式

1、桥接模式:
 所谓桥接就是把两个本来分开的网段连接起来,连接之后成为了一个更大的网络。vmware提供了一个虚拟的桥接器,他就像一座桥一样把虚拟机的网络环境和物理机的网络环境连在了一起。
 所以桥接之后虚拟机就是物理机网络环境的一部分了,此时虚拟机就像和局域网中其他机器一样,它可以访问网络中的任何机器,网络中其他机器也可以访问虚拟机,当然虚拟机也可以上外网。所以这种模式下天然就是可以互联互通的,当然这种模式也有它的一些注意事项,下文会详细解释。
2、Host-only模式:
 这种又叫“仅主机模式”,此时,虚拟机最多只能跟宿主机传输数据,但所有虚拟机之间是可以相互访问的。这种模式下虚拟机和真实的物理网络是隔离开来的,所有虚拟机可以互相访问,但局域网其他机器不可以访问虚拟机。这种模式安全限制是最严的,虚拟机不会对网络中其他机器产生任何影响,一般用于局部测试。这种模式下虚拟机没法上网,虚拟机需要的资料可以通过宿主机拷贝进去。
3、NAT模式:
 所谓NAT就是网络地址映射,虚拟机对外访问的时候是先映射到宿主物理机上,物理机再对外进行转发,反过来,也是类似的过程。所以想实现虚拟机和其他物理机的互联互通就需要配置相应的网关代理或端口转发。此时,如果宿主物理机可以上网,那么虚拟机也是可以的

我们选择桥接模式进行配置,操作更简便。

二.主机配置

主机和虚拟机IP地址必须在同一个网段中,我们设置主机1静态IP

主机2静态IP配置同主机1配置方式

三.虚拟机桥接模式配置

虚拟机配置步骤1

虚拟机配置步骤2

这一步非常关键,这里的这个下拉选项如果选错了那么是没有办法联网的,并且你的主机和虚拟机也会无法通信

四.配置虚拟机网络

我使用的是Ubuntu16.04版虚拟机

1.首先就是要配置ip地址
vim /etc/network/interfaces
进入文件,将里面的内容修改成如下形式:

#interfaces(5) file used by ifup(8) and ifdown(8)auto loiface lo inet loopback

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
addressxxx.xxx.xxx.xxx #IP地址
netmaskxxx.xxx.xxx.xxx #子网掩码
gatewayxxx.xxx.xxx.xxx #网关

注意:网卡选择已存在的网卡,使用ip addr 可查看可以使用的网卡


2.最重要的一步,重启网关
sudo/etc/init.d/networking restart
3.要是重启不成功的话(就像我一样)且遇到:
`[….] Restarting networking (via systemctl): networking.serviceJob for networking.service failed because the control process exited with error code. See “systemctl status networking.service” and “journalctl -xe” for details.
这样的错误了,可以在interfaces`文件中加上mac地址:

重起完之后 ping 一下看看网络通没通,或者执行 ifconfig 命令,看看网络是否配置好了。

设置主机1的虚拟机IP地址为192.168.242.215

设置主机2的一个虚拟机的IP地址为192.168.242.224

 

### 实现两台电脑之间通过网络进行通信 为了使两台电脑能够通过网络进行通信,需要完成以下几个方面的配置: #### 1. IP 地址在同一网段 确保两台电脑的 IP 地址位于同一网段是非常重要的。例如,在 Ubuntu 虚拟机环境中,可以通过修改 `/etc/netplan/` 下的网络配置文件来设置静态 IP 地址[^1]。假设第一台电脑的 IP 地址为 `192.168.1.100`,第二台电脑的 IP 地址可以设为 `192.168.1.101`,子网掩码统一设置为 `255.255.255.0`。 ```yaml network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 # 对于第二台电脑改为 192.168.1.101 gateway4: 192.168.1.1 nameservers: addresses: - 8.8.8.8 ``` 应用上述配置后,重启网络服务以生效: ```bash sudo netplan apply ``` #### 2. 数据链路层协议支持 两台电脑之间的物理连接通常依赖于网线或其他介质。当使用直连方式时,网卡会基于数据链路层协议(如以太网协议)将待发送的数据封装成帧并传递给对方设备[^2]。如果采用无线方式进行通信,则需确保双方均接入同一个 Wi-Fi 网络或热点。 #### 3. 测试网络连通性 在网络配置完成后,应验证两台电脑间的连通状态。可利用命令行工具 `ping` 来测试目标主机是否可达。例如,在其中一台机器上运行如下指令: ```bash ping 192.168.1.101 ``` 若返回超时错误或者提示“无法访问目标主机”,则表明当前存在某些障碍阻止正常通讯过程发生;此时可以根据具体情况进行排查处理[^3]。 #### 4. 编程实现跨平台消息交换 一旦确认基础层面无障碍之后,就可以着手开发应用程序以便进一步加强交互能力了。无论是在 C# 还是 Java 中都可以借助 Sockets API 完成这一任务[^4][^5]。下面给出一段简单的 Python 示例代码展示如何创建基本的服务端与客户端逻辑框架结构: ```python import socket def start_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = '192.168.1.100' port = 12345 server_socket.bind((host, port)) server_socket.listen(5) while True: client_socket, addr = server_socket.accept() print(f"Received connection from {addr}") message = "Hello Client!" client_socket.send(message.encode('utf-8')) client_socket.close() def connect_to_server(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = '192.168.1.100' port = 12345 client_socket.connect((host, port)) data = client_socket.recv(1024).decode('utf-8') print(data) client_socket.close() if __name__ == "__main__": import threading t1 = threading.Thread(target=start_server) t2 = threading.Thread(target=connect_to_server) t1.start();t2.start(); t1.join();t2.join(); ``` 以上脚本分别定义了一个服务器函数用于监听来自特定地址端口上的请求,并向每一个新建立起来的链接回应一条问候语句;另一个则是对应的客户程序部分负责发起对该指定位置的尝试联系动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值