C语言实现简单UDP协议服务端
2017-06-26 13:57
851 查看
一、源代码
二、为UDP在应用层增强可靠性的策略
关键在于两点,从应用层角度考虑:
1 提供超时重传,能避免数据报丢失。
2 提供确认序列号,可以对数据报进行确认和排序。
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> //#include<netinet/in.h> #include<string.h> static void usage(const char * str) { printf("Usage:%s [IP] [PORT]\n",str); } // ./server 127.0.0.1 8080 int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } int sock = socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("sock"); return 2; } struct sockaddr_in serv_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons( atoi(argv[2]) ); serv_addr.sin_addr.s_addr = inet_addr(argv[1]); if( (bind(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) ) < 0 ) { perror("bind"); return 3; } char buf[BUFSIZ] ; struct sockaddr_in clie_addr; socklen_t len = sizeof(clie_addr); while(1) { ssize_t s = recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&clie_addr,&len );//最后一个参数是输入输出参数, if(s > 0) { buf[s] = 0; //最后加上一个\0 printf("%s:%d say # %s\n",inet_ntoa(clie_addr.sin_addr),ntohs(clie_addr.sin_port),buf); sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&clie_addr,sizeof(clie_addr)); } } close(sock); return 0; }
二、为UDP在应用层增强可靠性的策略
关键在于两点,从应用层角度考虑:
1 提供超时重传,能避免数据报丢失。
2 提供确认序列号,可以对数据报进行确认和排序。
本端:首先在UDP数据报定义一个首部,首部包含确认序列号和时间戳,时间戳是用来计算RTT(数据报传输的往返时间),从何计算出合适的RTO(重传的超时时间)。然后以等-停的方式发送数据报,即收到对端的确认之后才发送下一个的数据报。当时间超时,本端重传数据报,同时RTO扩大为原来的两倍,重新开始计时。 对端:接受到一个数据报之后取下该数据报首部的时间戳和确认序列号,并添加本端的确认数据报首部之后发送给对端。根据此序列号对已收到的数据报进行排序并丢弃重复的数据报。
相关文章推荐
- golang实现简单的udp协议服务端与客户端示例
- DNS解析协议的C语言简单实现
- .net平台 基于 XMPP协议的即时消息服务端简单实现 (转)
- C语言实现简单的Web服务端
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- udp协议简单实现登录功能
- java,UDP协议简单实现
- Linux中使用C语言实现基于UDP协议的Socket通信示例
- Java使用UDP协议收发数据简单实现
- java socket UDP协议收发数据简单实现通信示例
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- 通过socket和Udp协议简单实现一个群体聊天工具(控制台)
- python+soket实现UDP协议的客户/服务端中文聊天程序
- 基于UDP实现简单的客户端服务端的消息传递
- 基于 XMPP协议的即时消息服务端简单实现
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- 通过socket和Udp协议简单实现一个群体聊天工具(控制台)
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- (UDP协议的应用)简单的广播实现