服务器
**************************************************************************************************************
#include
#include
#include
#include
#include
#include
#include
#define PORT 8888
#define IP "192.168.31.162"
#define ERR_MSG(msg) do{\
fprintf(stderr,"__%d__\n",__LINE__);\
perror("msg");\
}while(0)
int main(int argc, const char *argv[])
{
//1、创建套接字
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
ERR_MSG("socket");
return -1;
}
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);//端口号(主机端口号转为网络字节序)
sin.sin_addr.s_addr =inet_addr(IP);//IP的网络字节序
//2、绑定服务器IP地址和端口号
if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))<0)
{
ERR_MSG("bind");
return -1;
}
printf("Udp服务器绑定成功\n");
//变量初始化
char buf[32]="";
struct sockaddr_in cin;
socklen_t cinlen=sizeof(cin);
while(1)
{
//3、接收数据
ssize_t rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&cinlen);
if(rcv<0)
{
ERR_MSG("recvfrom");
return -1;
}
printf("__%d__,%s:%d:%s\n",\
__LINE__,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
//4、发送数据,要指定发送到的地址
// bzero(buf,sizeof(buf));
strcat(buf,"*_*");
ssize_t sd = sendto(sfd,&buf,sizeof(buf),0,(struct sockaddr*)&cin,cinlen);
if(sd<0)
{
ERR_MSG("sendto");
return -1;
}
printf("发送成功\n");
}
//5、关闭套接字
close(sfd);
return 0;
}
**************************************************************************************************************
客户端
**************************************************************************************************************
#include
#include
#include
#include
#include
#include
#include
//服务器的端口号和主机IP
#define SIN_PORT 8888
#define SIN_IP "192.168.31.162"
//客户端的端口号和主机IP
#define CIN_PORT 6666
#define CIN_IP "192.168.31.162"
#define ERR_MSG(msg) do{\
fprintf(stderr,"__%d__\n",__LINE__);\
perror(msg);\
}while(0)
int main(int argc, const char *argv[])
{
//1、创建套接字(服务器端)
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
ERR_MSG("socket");
return -1;
}
//服务器地址信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SIN_PORT);//端口号(主机端口号转为网络字节序)
sin.sin_addr.s_addr =inet_addr(SIN_IP);//服务器IP的网络字节序
//客户端地址信息结构体
struct sockaddr_in cin;
/*
cin.sin_family = AF_INET;
cin.sin_port = htons(CIN_PORT);//端口号(客户端主机端口号转为网络字节序)
cin.sin_addr.s_addr =inet_addr(CIN_IP);//客户端IP的网络字节序
//2、绑定客户端IP地址和端口号
if(bind(sfd,(struct sockaddr *)&cin,sizeof(cin))<0)
{
ERR_MSG("bind");
return -1;
}
printf("Udp客户端绑定成功\n");
*/
//变量初始化
char buf[32]="";
socklen_t sinlen=sizeof(sin);
socklen_t cinlen=sizeof(cin);
ssize_t sd=0,rcv=0;
while(1)
{
//4、发送数据,要指定发送到的地址
bzero(buf,sizeof(buf));
printf("要发送到服务器的数据-->");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
sd = sendto(sfd,&buf,sizeof(buf),0,(struct sockaddr*)&sin,sinlen);
if(sd<0)
{
ERR_MSG("sendto");
return -1;
}
printf("发送成功\n");
//3、接收数据
rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&cinlen);
if(rcv<0)
{
ERR_MSG("recvfrom");
return -1;
}
printf("__%d__,%s:%d:%s\n",\
__LINE__,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
}
//5、关闭套接字
close(sfd);
return 0;
}
上一篇:冼东妹、武大靖、朱启南,多位奥运冠军春节前履新职 冼东妹奥运会拿过几次冠军 冼东妹奥运会
下一篇:有望成为当地首个L4级,丰田计划今年在日本提供自动驾驶汽车服务 丰田什么时候出l2级自动驾驶 最新丰田自动驾驶汽车