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

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

 

一般装完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

 

两台电脑进行 TCP 通讯时,服务端的设置方法如下: - **排除防火墙干扰**:防火墙可能导致 TCP 通信错误,需确保防火墙不会阻止 TCP 通信,排除防火墙对通讯的影响 [^1]。 - **配置 IP 地址**:在以太网 IPv4 中配置 IP 地址,确保与客户端处于同网段,这样才能进行有效的网络连接。若存在虚拟机网卡,要注意其 IP 地址不能与服务端 IP 地址冲突,否则客户端可能会连接到虚拟机网卡而非服务端 [^1]。 - **多客户端服务端实现步骤**: - **创建 socket**:创建一个套接字,用于后续的网络通信。 - **绑定 socket 到 IP 及端口号**:将创建好的套接字绑定到指定的 IP 地址端口号,以便客户端能够准确连接。 - **开始监听客户端连接请求**:让服务端开始监听客户端的连接请求,等待客户端发起连接。 - **接受客户端连接请求并创建新的线程处理该客户端请求**:当有客户端发起连接请求时,服务端接受请求,并为该客户端创建新的线程进行处理,以实现多客户端的并发处理。 - **客户端与服务端进行通信交互**:服务端与客户端建立连接后,即可进行数据的传输交互 [^2]。 - **使用相关库进行套接字编程**:以 Windows C++ 为例,可通过 winsock2 库进行套接字编程,确保数据的可靠传输。服务器端等待客户端的连接,并接收来自客户端的字符串消息 [^3]。 以下是一个简单的 Windows C++ 服务端代码示例: ```cpp #include <winsock2.h> #include <iostream> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { std::cerr << "WSAStartup failed." << std::endl; return 1; } SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0); if (listenSocket == INVALID_SOCKET) { std::cerr << "Socket creation failed." << std::endl; WSACleanup(); return 1; } sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(12345); if (bind(listenSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { std::cerr << "Bind failed." << std::endl; closesocket(listenSocket); WSACleanup(); return 1; } if (listen(listenSocket, SOMAXCONN) == SOCKET_ERROR) { std::cerr << "Listen failed." << std::endl; closesocket(listenSocket); WSACleanup(); return 1; } std::cout << "Waiting for a client connection..." << std::endl; sockaddr_in clientAddr; int clientAddrLen = sizeof(clientAddr); SOCKET clientSocket = accept(listenSocket, (sockaddr*)&clientAddr, &clientAddrLen); if (clientSocket == INVALID_SOCKET) { std::cerr << "Accept failed." << std::endl; closesocket(listenSocket); WSACleanup(); return 1; } std::cout << "Client connected." << std::endl; char buffer[1024]; int bytesReceived = recv(clientSocket, buffer, sizeof(buffer), 0); if (bytesReceived > 0) { buffer[bytesReceived] = '\0'; std::cout << "Received from client: " << buffer << std::endl; } closesocket(clientSocket); closesocket(listenSocket); WSACleanup(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值