A. 一台伺服器如何做到多網路線路接入
TCP協議:伺服器端:tcp_server.c[cpp]viewplainprint?#include#include#include#include#includeintmain(intargc,char*argv[]){intserver_sockfd;//伺服器端套接字intclient_sockfd;//客戶端套接字intlen;structsockaddr_inmy_addr;//伺服器網路地址結構體structsockaddr_inremote_addr;//客戶端網路地址結構體intsin_size;charbuf[BUFSIZ];//數據傳送的緩沖區memset(&my_addr,0,sizeof(my_addr));//數據初始化--清零my_addr.sin_family=AF_INET;//設置為IP通信my_addr.sin_addr.s_addr=INADDR_ANY;//伺服器IP地址--允許連接到所有本地地址上my_addr.sin_port=htons(8000);//伺服器埠號/*創建伺服器端套接字--IPv4協議,面向連接通信,TCP協議*/if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))0)){buf[len]='/0';printf("%s/n",buf);if(send(client_sockfd,buf,len,0)#include#include#include#includeintmain(intargc,char*argv[]){intserver_sockfd;//伺服器端套接字intclient_sockfd;//客戶端套接字intlen;structsockaddr_inmy_addr;//伺服器網路地址結構體structsockaddr_inremote_addr;//客戶端網路地址結構體intsin_size;charbuf[BUFSIZ];//數據傳送的緩沖區memset(&my_addr,0,sizeof(my_addr));//數據初始化--清零my_addr.sin_family=AF_INET;//設置為IP通信my_addr.sin_addr.s_addr=INADDR_ANY;//伺服器IP地址--允許連接到所有本地地址上my_addr.sin_port=htons(8000);//伺服器埠號/*創建伺服器端套接字--IPv4協議,面向連接通信,TCP協議*/if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))0)){buf[len]='/0';printf("%s/n",buf);if(send(client_sockfd,buf,len,0)#include#include#include#includeintmain(intargc,char*argv[]){intclient_sockfd;intlen;structsockaddr_inremote_addr;//伺服器端網路地址結構體charbuf[BUFSIZ];//數據傳送的緩沖區memset(&remote_addr,0,sizeof(remote_addr));//數據初始化--清零remote_addr.sin_family=AF_INET;//設置為IP通信remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//伺服器IP地址remote_addr.sin_port=htons(8000);//伺服器埠號/*創建客戶端套接字--IPv4協議,面向連接通信,TCP協議*/if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))#include#include#include#includeintmain(intargc,char*argv[]){intclient_sockfd;intlen;structsockaddr_inremote_addr;//伺服器端網路地址結構體charbuf[BUFSIZ];//數據傳送的緩沖區memset(&remote_addr,0,sizeof(remote_addr));//數據初始化--清零remote_addr.sin_family=AF_INET;//設置為IP通信remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//伺服器IP地址remote_addr.sin_port=htons(8000);//伺服器埠號/*創建客戶端套接字--IPv4協議,面向連接通信,TCP協議*/if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))#include#include#include#includeintmain(intargc,char*argv[]){intserver_sockfd;intlen;structsockaddr_inmy_addr;//伺服器網路地址結構體structsockaddr_inremote_addr;//客戶端網路地址結構體intsin_size;charbuf[BUFSIZ];//數據傳送的緩沖區memset(&my_addr,0,sizeof(my_addr));//數據初始化--清零my_addr.sin_family=AF_INET;//設置為IP通信my_addr.sin_addr.s_addr=INADDR_ANY;//伺服器IP地址--允許連接到所有本地地址上my_addr.sin_port=htons(8000);//伺服器埠號/*創建伺服器端套接字--IPv4協議,面向無連接通信,UDP協議*/if((server_sockfd=socket(PF_INET,SOCK_DGRAM,0))#include#include#include#includeintmain(intargc,char*argv[]){intserver_sockfd;intlen;structsockaddr_inmy_addr;//伺服器網路地址結構體structsockaddr_inremote_addr;//客戶端網路地址結構體intsin_size;charbuf[BUFSIZ];//數據傳送的緩沖區memset(&my_addr,0,sizeof(my_addr));//數據初始化--清零my_addr.sin_family=AF_INET;//設置為IP通信my_addr.sin_addr.s_addr=INADDR_ANY;//伺服器IP地址--允許連接到所有本地地址上my_addr.sin_port=htons(8000);//伺服器埠號/*創建伺服器端套接字--IPv4協議,面向無連接通信,UDP協議*/if((server_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0){perror("socket");return1;}/*將套接字綁定到伺服器的網路地址上*/if(bind(server_sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))<0){perror("bind");return1;}sin_size=sizeof(structsockaddr_in);printf("waitingforapacket/n");/*接收客戶端的數據並將其發送給客戶端--recvfrom是無連接的*/if((len=recvfrom(server_sockfd,buf,BUFSIZ,0,(structsockaddr*)&remote_addr,&sin_size))<0){perror("recvfrom");return1;}printf("receivedpacketfrom%s:/n",inet_ntoa(remote_addr.sin_addr));buf[len]='/0';printf("contents:%s/n",buf);close(server_sockfd);return0;}
B. 伺服器雙網卡雙路由器如何設置同時使用
外網的網卡保留預設網關,內網的網卡不要填預設網關IP,如果你內網除了網卡所在的網段還有其他網段,在伺服器上用route add命令增加其他網段的路由就可以。