一、思维导图
二、练习
TCP通信
服务器
#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("error");return -1;}//绑定服务器网络信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(bind(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error2");return -1;}//监听if(listen(wfd,128)==-1){perror("error3");return -1;}//接受客户端的连接struct sockaddr_in cin;socklen_t socklen=sizeof(cin); int cfd=-1;if((cfd=accept(wfd,(struct sockaddr *)&cin,&socklen))==-1){perror("error3");return -1;}char str[128]="";while(1){//清空数组bzero(str,sizeof(str));//读取数据recv(cfd,str,sizeof(str),0);printf("读取数据:%s\n",str);if(strcmp(str,"quit")==0){printf("读取结束\n");break;}//修改数据strcat(str,"^_^");send(cfd,str,strlen(str),0);}close(wfd);close(cfd);return 0;
}
客户端
#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("error");return -1;}//绑定服务器网络信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(connect(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error3");return -1;}char str[128]="";while(1){//清空数组bzero(str,sizeof(str));//写入数据printf("请输入:");fgets(str,sizeof(str),stdin);str[strlen(str)-1]=0;send(wfd,str,sizeof(str),0);if(strcmp(str,"quit")==0){printf("程序结束\n");break;}//读取从服务器发来的数据bzero(str,sizeof(str));recv(wfd,str,sizeof(str),0);printf("从服务器读取的数据为:%s\n",str);}close(wfd);return 0;
}
UDP通信
服务器
#include <myhead.h>
#define SER_PORT 7899
#define SER_IP "192.168.126.42"
int main(int argc, const char *argv[])
{//创建套接字int wfd=socket(AF_INET,SOCK_DGRAM,0);if(wfd==-1){perror("error");return -1;}printf("wfd=%d\n",wfd);//绑定//将服务器的网络数据绑定struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(bind(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("error");return -1;}char str[128]="";struct sockaddr_in cin;socklen_t socklen=sizeof(cin);while(1){bzero(str,sizeof(str));recvfrom(wfd,str,sizeof(str),0,(struct sockaddr *)&cin,&socklen);printf("收到得数据为:%s\n",str); if(strcmp(str,"quit")==0){printf("程序结束\n");break;}strcat(str,"^_^");if(sendto(wfd,str,strlen(str),0,(struct sockaddr *)&cin,socklen)==-1){perror("Eroor");return -1;}}close(wfd);return 0;
}
客户端
#include <myhead.h>
#define SER_IP "192.168.126.42"
#define SER_PORT 7899
int main(int argc, const char *argv[])
{int wfd=-1;//创建套接字if((wfd=socket(AF_INET,SOCK_DGRAM,0))==-1){perror("error");return -1;}//绑定服务器网络信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP); char str[128]="";while(1){bzero(str,sizeof(str));printf("请输入数据:");fgets(str,sizeof(str),stdin);str[strlen(str)-1]=0;sendto(wfd,str,sizeof(str),0,(struct sockaddr *)&sin,sizeof(sin));if(strcmp(str,"quit")==0){printf("程序结束\n");break;}}close(wfd);return 0;
}