UDP客户端
#define SER_IP "192.168.110.119"
#define SER_PORT 8889
#define CLI_IP "192.168.110.119"
#define CLI_PORT 6667
int main(int argc, const char *argv[])
{
//创建描述符
int cfd = socket(AF_INET,SOCK_DGRAM,0);
if (-1 == cfd )
{
perror("socket error");
return -1;
}
printf("cfd = %d\n",cfd);
//绑定端口号
//填充地址信息结构体
struct sockaddr_in cin;//定义客户端的地址信息结构体
cin.sin_family = AF_INET;
cin.sin_port = htons(CLI_PORT);
cin.sin_addr.s_addr = inet_addr(CLI_IP);
socklen_t addrlen = sizeof(cin);
//绑定
if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1 )
{
perror("bind error");
return -1;
}
printf("bind success\n");
//发送接收数据
char wbuf[128] = ""; //发送容器
char rbuf[128] = ""; //接收容器
//填充服务器信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
while(1) //循环发送数据并接收服务器返回的消息
{
bzero(wbuf,sizeof(wbuf));
bzero(rbuf,sizeof(rbuf));
//从终端上获取信息
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf) - 1] = 0; //将回车换成文件结束符
//将消息发送给服务器
if(sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&sin,sizeof(sin)) == -1)
{
perror("sendto error");
return -1;
}
printf("发送成功\n");
//接收服务器传来的消息
if(recvfrom(cfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen) == -1)
{
perror("recvfrom error");
return -1;
}
printf("接收到的消息为:[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);
}
//关闭描述符
close (cfd);
return 0;
}
UPD服务器
#define SER_IP "192.168.110.119"
#define SER_PORT 8889
int main(int argc, const char *argv[])
{
//创建描述符
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(-1 == sfd)
{
perror("socket");
return -1;
}
printf("sfd = %d\n",sfd);
//绑定ip
//填充地址信息结构体
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(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1)
{
perror("bind error");
return -1;
}
printf("bind success\n");
//数据收发
char rbuf[128] = "";
struct sockaddr_in cin;
socklen_t addrlen = sizeof(cin);
while(1)
{
bzero(rbuf,sizeof(rbuf));
//read(sfd,rbuf,sizeof(rbuf));
recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen);
printf("收到的消息为:%s\n",rbuf);
strcat(rbuf,"*_*");
if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,sizeof(cin)) == -1)
{
perror("write error");
return -1;
}
printf("发送成功\n");
}
//关闭套接字
close (sfd);
return 0;
}
效果图


被折叠的 条评论
为什么被折叠?



