1. 前言
一般Linux编程时,经常都会使用虚拟机跑Linux系统,VMware Workstation Pro 虚拟机里的系统不管是Linux、还是windows、还是其他系统想要上网就必须配置好虚拟网络连接方式。VMware Workstation 支持共享、桥接,选择网卡的方法自定义上网方式。
如果虚拟机里的系统想要拥有一个独立的IP地址(路由器认为是一台新设备),那么就需要设置成桥接模式。
如果虚拟机里的系统只想要上外网,而连接的WIFI又需要输入密码,或者像校园网这种,一个账号不能多台设备同时使用这种,那么就设置成NAT共享方式即可。
想要在虚拟机你跑的系统愉快的上网,进行各种网络编程、服务器搭建,那么第一步首先得先把系统接入网络才行。
下面章节就介绍ubuntu16.04、readhat6.3系统下如何配置网络实现网络连接。
2. ubuntu 16.04 设置网络连接方式
2.1 打开虚拟机的网络编辑器
2.2 选择桥接电脑当前连接网络的网卡
比如: 当前电脑使用有线连接路由器,那么就选择桥接到有线网卡。如果当前电脑使用的是WIFI方式连接路由器,那么就选择桥接到无线网卡。
如果不知道自己网卡的名字是哪一个怎么办?
可以在windows下打开网络适配器进行查看。
2.3 设置虚拟机的联网方式
2.4 测试网络是否畅通
3.5 编写代码测试网络通信
使用代码创建一个TCP服务器,然后windows系统通过网络调试助手连接进来,进行通信。
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>
/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
/*
设置网卡的IP地址
$ sudo ifconfig eth0 192.168.1.23
服务器创建流程:
1. 创建socket套接字(文件描述符)---类型open函数一样
2. 绑定端口号(创建服务器:提供端口号和IP地址)
3. 设置监听的客户端数量(设置待处理的队列最大缓存待连接的客户端数量)
4. 等待客户端连接(被动--阻塞): 多线程和多进程方式并发处理客户端连接。
5. 实现通信(客户端连接成功)
*/
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("参数: ./tcp_server <端口号>\n");
return 0;
}
/*1. 创建socket套接字*/
int sockfd;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("服务器:套接字创建失败.\n");
return 0;
}
/*2. 绑定端口号*/
struct sockaddr_in addr;
addr.sin_family=AF_INET; //IPV4
addr.sin_port=htons(atoi(argv[1])); //65535
//addr.sin_addr.s_addr=inet_addr("192.168.2.16");
addr.sin_addr.s_addr=INADDR_ANY; //本地所有IP地址 "0.0.0.0"
if(bind(sockfd,(const struct sockaddr *)&addr,sizeof(struct sockaddr)))
{
printf("服务器:端口号绑定失败.\n");
return 0;
}
/*3. 设置等待连接的客户端数量*/
listen(sockfd,10);
/*4. 等待客户端连接(被动--阻塞)*/
struct sockaddr_in client_addr;
socklen_t addrlen=sizeof(struct sockaddr_in);
int client_sockfd; //客户端的套接字
client_sockfd=accept(sockfd,(struct sockaddr *)&client_addr,&addrlen);
if(client_sockfd<0)
{
printf("服务器:处理客户端的连接失败.\n");
return 0;
}
/*5. 实现数据通信*/
printf("连接上的客户端IP地址:%s\n",inet_ntoa(client_addr.sin_addr));
printf("连接上的客户端端口:%d\n",ntohs(client_addr.sin_port));
char buff[100];
int cnt;
while(1)
{
cnt=read(client_sockfd,buff,100);
buff[cnt]='\0';
printf("服务器接收的数据:%d,%s\n",cnt,buff);
sleep(5);
}
/*6. 关闭套接字*/
close(client_sockfd);
close(sockfd);
return 0;
}
3. RedHat 红帽6.3系统
3.1 设置网络
设置方法与ubuntu 系统一样。