UDP服务器、客户端的简单实现
来源:互联网 发布:巫师2优化补丁 编辑:程序博客网 时间:2024/05/20 10:21
TCP协议和UDP协议的区别:
TCP:面向连接,传输可靠(保证数据正确性,保证数据顺序),用于传输大量数据(流模式),速度慢,建立连接需要开销较多。
UDP:面向非连接,传输不可靠,用于传输少量数据(数据包模式),速度快。
UDP协议的搭建流程
---------------------------UDP通信接收端-----------------------------------
1.创建socket
头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
函数原型:
int socket(int domain, int type, int protocol);
参数一:IP协议 AF_INET IPv4 Internet protocols ip(7)
AF_INET6 IPv6 Internet protocols ipv6(7)
AF_IPX IPX - Novell protocols
参数二:传输协议 SOCK_STREAM ---》TCP协议
SOCK_DGRAM ---》UDP协议
参数三:socket的属性 填写为0 默认属性
返回值:成功发回 新的socket文件描述符 ,失败返回 -1
2.绑定socket
头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
函数原型:
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
参数一:创建的socket文件描述符
参数二:服务器绑定信息
参数三:服务器信息结构体的大小
返回值:成功返回0 ,失败返回-1
3.接收函数
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
参数一:socket文件描述符
参数二: 接收缓存区
参数三:接收数据的大小
参数四:接收函数的属性 0默认属性
参数五:保存发送方的IP信息
参数六:成功获取对方信息的大小
---------------------------UDP通信发送端-----------------------------------
1.创建socket
头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
函数原型:
int socket(int domain, int type, int protocol);
参数一:IP协议 AF_INET IPv4 Internet protocols ip(7)
AF_INET6 IPv6 Internet protocols ipv6(7)
AF_IPX IPX - Novell protocols
参数二:传输协议 SOCK_STREAM ---》TCP协议
SOCK_DGRAM ---》UDP协议
参数三:socket的属性 填写为0 默认属性
返回值:成功发回 新的socket文件描述符 ,失败返回 -1
2.发送函数
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
参数一:socket文件描述符
参数二: 发送缓存区
参数三:发送数据的大小
参数四:发送函数的属性 0默认属性
参数五:接收方的IP信息
参数六:IP信息结构体的大小
-----------------------------------------------------------------------------------------------------------------------
练习:udp服务器和客户端的简单通信实现
【udprecv.c】
#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdio.h>int main(int argv,char **argc){//创建socket int sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) {perror("create sock fail\n"); } //设置接收端信息 struct sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argc[1])); addr.sin_addr.s_addr = inet_addr("0.0.0.0");//0.0.0.0为万能地址,可自动匹配IP //绑定接收端信息 char buf[100]={0}; int ret = bind(sockfd,(struct sockaddr *)&addr,sizeof(addr)); if(ret < 0)perror("bind fail:"); //接收UDP数据包 struct sockaddr_in client_addr; bzero(&client_addr,sizeof(client_addr)); int len = sizeof(client_addr); while(1) {ssize_t ret = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&len);if(ret < 0)perror("error:");elseprintf("buf = %s\n",buf); } close(sockfd); }
-----------------------------------------------------------------------------------------------------------------------
【udpsend.c】
#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h> #include <unistd.h>#include <stdio.h>int main(int argv,char **argc){//创建socket int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) {perror("create sock fail\n"); } //设置接收端的信息 struct sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argc[1])); addr.sin_addr.s_addr = inet_addr(argc[2]); char buf[10]={"udpdate"}; int ret=0; //发送UDP数据包 while(1) { ret=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr)); if(ret>0) {printf("buf=%s\tsize=%d\n",buf,ret); } sleep(1); } close(sockfd); }
-----------------------------------------------------------------------------------------------------------------------
程序运行时必须先运行服务器程序,再运行客户端程序,并且设置端口和服务器ip地址
阅读全文
0 0
- UDP服务器、客户端的简单实现
- Linux C实现简单的UDP服务器客户端通信
- python socket实现简单的(TCP/UDP)服务器/客户端
- python3实现UDP协议的简单服务器和客户端
- python3实现UDP协议的简单服务器和客户端
- Python实现udp协议的简单服务器和客户端通信
- 实现简单UDP服务器客户端模型
- 简单的python UDP服务器客户端连接
- UDP简单实现并发服务器和客户端简单通信
- 单用户UDP服务器的简单实现
- 简单的无连接的udp服务器和客户端
- UDP协议实现服务器与客户端的通信
- socket编程:简单UDP服务器/客户端编程
- 基于UDP实现简单的客户端服务端的消息传递
- 网络编程--python 实现简单的UDP客户端和服务端
- Java简单实现UDP服务端和客户端的通信
- JAVA实现简单的客户端服务器模型
- TCP服务器、客户端的简单实现
- vb.net 教程 12-4 msHtml 5 偷梁换柱
- [3]React 深入浅出-----JSX简介
- Java密码学
- hdu 4442 Physical Examination
- 线程——消费者生产者
- UDP服务器、客户端的简单实现
- 合并txt文件
- 问题 T: A+B和C比大小
- const关键字
- perl 生成json树
- Angular 基础部分 1.1 简介
- Android View — Gradient 渐变
- 装饰者模式(Decorator Pattern)
- 【Linux 学习】Linux目录配置