国外设计网站导航,特价网站建设官网,好看的登录页面自适应模板,手工外包加工网可信吗一、UDP通信 TCP#xff1a;传输控制协议#xff0c;面向连接的#xff0c;稳定的#xff0c;可靠的#xff0c;安全的数据集流传递
稳定和可靠:丢包重传
数据有序:序号和确认序号
流量控制:稳定窗口 UDP#xff1a;用户数据报协议
面向无连接的,不稳定的,不可靠,不安…一、UDP通信 TCP传输控制协议面向连接的稳定的可靠的安全的数据集流传递
稳定和可靠:丢包重传
数据有序:序号和确认序号
流量控制:稳定窗口 UDP用户数据报协议
面向无连接的,不稳定的,不可靠,不安全的数据报传递---更像是收发短信,UDP传输不需要建立连接,传输效率更高,在稳定的局域网内部环境相对可靠 UDP通信相关函数介绍 接收信息函数 ssize_t recvfromint sockfd void *buf size_t len int flags 结构 sockaddr *src_addr socklen_t *addrlen; 函数说明: 接收消息 参数说明: sockfd 套接字 buf 要接受的缓冲区 len 缓冲区的长度 flags 标志位 一般填0 src_addr 原地址 传出参数 addrlen 发送方地址长度 返回值 成功: 返回读到的字节数 失败 返回 -1 设置errno 调用该函数相当于TCP通信的recvaccept函数 发送数据函数 ssize_t sendtoint sockfd const void *buf size_t len int flags const struct sockaddr *dest_addr socklen_t addrlen; 函数说明: 发送数据 参数说明: sockfd 套接字 dest_addr 目的地址 addrlen 目的地址长度 返回值 成功: 返回写入的字节数 失败 返回-1设置errno 二、UDP服务端和客户端开发流程 1.服务端开发流程
1 创建socket man 7 udp
udp_socket 套接字AF_INETSOCK_DGRAM0;
SOCK_DGRAM面向无连接不安全不可靠的数据报传输
2 绑定-绑定
3 而 1
{
读取数据
n recvfromcfdbufsizeofbuf0struct sockaddr * clientlen;
发送数据
sendtocfdbufn0struct sockaddr *clientlen; } (4)//关闭文件描述符
平仓CFD 2.客户端开发流程
1 创建socket man 7 udp
udp_socket 套接字AF_INETSOCK_DGRAM0;
2 而 1 { //发送数据 sendto(cfd,buf,n,0,(struct sockaddr *) client,len); //读取数据 n recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr *) client,len); }
(3)关闭socket套接字
close(cfd) 三、客户端和服务端代码开发案例
1.UDP服务端代码开发
代码
//udp服务端
#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include unistd.h
#include arpa/inet.h
#include netinet/in.h
#include ctype.hint main()
{int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd 0){perror(sock error);return -1;}struct sockaddr_in serv;struct sockaddr_in client;bzero(serv,sizeof(serv));serv.sin_family AF_INET;serv.sin_port htons(8888);serv.sin_addr.s_addr htonl(INADDR_ANY);bind(cfd,(struct sockaddr *)serv,sizeof(serv));int i;int n;socklen_t len;char buf[1024];while(1){memset(buf,0x00,sizeof(buf));len sizeof(client);n recvfrom(cfd, buf,sizeof(buf),0,(struct sockaddr *)client,len);for(i 0;i n;i ){buf[i] toupper(buf[i]);}printf([%d]: n [%d],buf [%s]\n,ntohs(client.sin_port),n,buf);sendto(cfd, buf,n,0,(struct sockaddr *)client,len);}close(cfd);return 0;
}
效果展示
运行服务端 使用nc -u 127.1 8888 进行连接到服务端 所有网络连接和进程的命令并过滤结果以仅显示与端口8888相关的连接或进程 2.UDP客户端代码开发
代码
//udp服务端
#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include unistd.h
#include arpa/inet.h
#include netinet/in.h
#include ctype.hint main()
{//创建socketint cfd socket(AF_INET, SOCK_DGRAM, 0);if(cfd0){perror(socket error);return -1;}//绑定struct sockaddr_in serv;serv.sin_family AF_INET;serv.sin_port htons(8888);inet_pton(AF_INET, 127.0.0.1, serv.sin_addr.s_addr);int n;char buf[1024];while(1){//读取标准输入 memset(buf, 0x00, sizeof(buf));n read(STDIN_FILENO,buf,sizeof(buf));//发送数据sendto(cfd, buf, n, 0, (struct sockaddr *)serv, sizeof(serv));//读取数据memset(buf, 0x00, sizeof(buf));n recvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL);printf(n[%d], buf[%s]\n, n, buf);}//关闭套接字close(cfd);return 0;
} 运行结果