一、思维导图
二、练习
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;
}