基于UDP编程
1 UDP是数据报协议,无连接的,不可靠,追求传输效率的一种通信协议数据的发送和接收是同步的.在进行通信之前,不需要建立连接.其传输效率比TCP高.对其服务器而言,并没有三次握手的过程.因此和TCP相比,少了被动监听listen)和accept).只需要创建通信设备,绑定IP地址和端口号.然后进行数据的收发.
1.服务器端的编程模型
- 创建一个socket端点,返回该端点的文件描述符fd socket2)
2 )将fd和本地地址绑定 bind2)
while1){
3) 阻塞等待客户端消息 recvfrom2)
4 )处理客户消息
5 )将处理结果发送给客户端 sendto2)
}
2 客户端的编程模型
1 创建一个socket端点 socket2)
2 使用fd设备向服务器发送消息 sendto2)
3 阻塞等待服务器的响应消息 recvfrom2)
4 处理响应消息
4 关闭fd设备 close2)
编程实现
服务器端
#include <stdio.h>
#include <t_net.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
int mainvoid){
SA4 cli;
char buf[128];
socklen_t len;
int fd = bind_sockAF_INET,SOCK_DGRAM,8000);
iffd == -1){
printf"%s\n",strerrorerrno));
return -1;
}
while1){
len = sizeofcli);
int recv = recvfromfd,buf,128,0,SA*)&cli,&len);
ifrecv == -1){
printf"%s\n",strerrorerrno));
return -1;
}
forint i = 0;i < recv;i++){
buf[i] = toupperbuf[i]);
}
sendtofd,buf,recv,0,SA*)&cli,sizeofcli));
}
return 0;
} ``
关于t_net.h,参见博主上一篇博客:TCP并发服务的实现
客户端
#include <stdio.h>
#include <errno.h>
#include <t_net.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
int mainint argc,char* argv[]){
char msg[128];
char buf[128];
int fd = socketAF_INET,SOCK_DGRAM,0);
iffd == -1){
printf"%s\n",strerrorerrno));
return 0;
}
SA4 serv;
serv.sin_family = AF_INET;
serv.sin_port = htons8000);
inet_ptonAF_INET,argv[1],&serv.sin_addr);
while1){
getsmsg);
//printf"%d\n",sizeofmsg));
sendtofd,msg,strlenmsg) + 1,0,SA*)&serv,sizeofserv));
int recv = recvfromfd,buf,sizeofbuf),0,NULL,NULL);
ifrecv > 0){
//write1,buf,recv);
printf"%s\n",buf);
ifstrcmpbuf,"BYEBYE") == 0) break;
}
}
closefd);
return 0;
}