1. 前言
一般Linux編程時(shí),經(jīng)常都會(huì)使用虛擬機(jī)跑Linux系統(tǒng),VMware Workstation Pro 虛擬機(jī)里的系統(tǒng)不管是Linux、還是windows、還是其他系統(tǒng)想要上網(wǎng)就必須配置好虛擬網(wǎng)絡(luò)連接方式。VMware Workstation 支持共享、橋接,選擇網(wǎng)卡的方法自定義上網(wǎng)方式。
如果虛擬機(jī)里的系統(tǒng)想要擁有一個(gè)獨(dú)立的IP地址(路由器認(rèn)為是一臺(tái)新設(shè)備),那么就需要設(shè)置成橋接模式。
如果虛擬機(jī)里的系統(tǒng)只想要上外網(wǎng),而連接的WIFI又需要輸入密碼,或者像校園網(wǎng)這種,一個(gè)賬號(hào)不能多臺(tái)設(shè)備同時(shí)使用這種,那么就設(shè)置成NAT共享方式即可。
想要在虛擬機(jī)你跑的系統(tǒng)愉快的上網(wǎng),進(jìn)行各種網(wǎng)絡(luò)編程、服務(wù)器搭建,那么第一步首先得先把系統(tǒng)接入網(wǎng)絡(luò)才行。
下面章節(jié)就介紹ubuntu16.04、readhat6.3系統(tǒng)下如何配置網(wǎng)絡(luò)實(shí)現(xiàn)網(wǎng)絡(luò)連接。
2. ubuntu 16.04 設(shè)置網(wǎng)絡(luò)連接方式
2.1 打開虛擬機(jī)的網(wǎng)絡(luò)編輯器
2.2 選擇橋接電腦當(dāng)前連接網(wǎng)絡(luò)的網(wǎng)卡
比如: 當(dāng)前電腦使用有線連接路由器,那么就選擇橋接到有線網(wǎng)卡。如果當(dāng)前電腦使用的是WIFI方式連接路由器,那么就選擇橋接到無線網(wǎng)卡。
如果不知道自己網(wǎng)卡的名字是哪一個(gè)怎么辦?
可以在windows下打開網(wǎng)絡(luò)適配器進(jìn)行查看。
2.3 設(shè)置虛擬機(jī)的聯(lián)網(wǎng)方式
2.4 測(cè)試網(wǎng)絡(luò)是否暢通
3.5 編寫代碼測(cè)試網(wǎng)絡(luò)通信
使用代碼創(chuàng)建一個(gè)TCP服務(wù)器,然后windows系統(tǒng)通過網(wǎng)絡(luò)調(diào)試助手連接進(jìn)來,進(jìn)行通信。
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#include
#include
/* According to earlier standards */
#include
#include
#include
/*
設(shè)置網(wǎng)卡的IP地址
$ sudo ifconfig eth0 192.168.1.23
服務(wù)器創(chuàng)建流程:
1. 創(chuàng)建socket套接字(文件描述符)---類型open函數(shù)一樣
2. 綁定端口號(hào)(創(chuàng)建服務(wù)器:提供端口號(hào)和IP地址)
3. 設(shè)置監(jiān)聽的客戶端數(shù)量(設(shè)置待處理的隊(duì)列最大緩存待連接的客戶端數(shù)量)
4. 等待客戶端連接(被動(dòng)--阻塞): 多線程和多進(jìn)程方式并發(fā)處理客戶端連接。
5. 實(shí)現(xiàn)通信(客戶端連接成功)
*/
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("參數(shù): ./tcp_server <端口號(hào)>\n");
return 0;
}
/*1. 創(chuàng)建socket套接字*/
int sockfd;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("服務(wù)器:套接字創(chuàng)建失敗.\n");
return 0;
}
/*2. 綁定端口號(hào)*/
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("服務(wù)器:端口號(hào)綁定失敗.\n");
return 0;
}
/*3. 設(shè)置等待連接的客戶端數(shù)量*/
listen(sockfd,10);
/*4. 等待客戶端連接(被動(dòng)--阻塞)*/
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("服務(wù)器:處理客戶端的連接失敗.\n");
return 0;
}
/*5. 實(shí)現(xiàn)數(shù)據(jù)通信*/
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("服務(wù)器接收的數(shù)據(jù):%d,%s\n",cnt,buff);
sleep(5);
}
/*6. 關(guān)閉套接字*/
close(client_sockfd);
close(sockfd);
return 0;
}
3. RedHat 紅帽6.3系統(tǒng)
3.1 設(shè)置網(wǎng)絡(luò)
設(shè)置方法與ubuntu 系統(tǒng)一樣。
3.2 關(guān)閉防火墻
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209322 -
網(wǎng)絡(luò)編程
+關(guān)注
關(guān)注
0文章
71瀏覽量
10074 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
914瀏覽量
28160
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論