面试复习—网络知识点-----UDP
来源:互联网 发布:win10设置java环境变量 编辑:程序博客网 时间:2024/06/06 01:11
一个UDP程序实例
与tcp程序不同的是,此处无连接,所以也不需要listen创建监听套接字,直接recvfrom接收数据,sendto发送数据
这两个函数原型:
ssize_t recvfrom(int sockfd, void* buff, size_t nbytes, int flags, struct sockaddr* from, len_t* len);
ssize_t sendto(int sockfd, void* buff, size_t nbytes, int flags, struct sockaddr* to, len_t len);
sockfd、buff、nbytes分别代表描述符,指向读出或写入的缓冲区,读写字节数
to代表要发往的接受者地址(自己填写目的地)
from保存发送者的地址(函数返回源)
客户端
①sockfd = socket(AF_INET, SOCK_DGRAM, 0);
SOCK_DGRAM代表数据报套接字
②struct sockaddr_in servaddr;//声明一个网际套接字地址结构
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);//绑定服务器端口
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);//绑定服务器ip地址(先将点分十进制数串转换成32位二进制)
在一个循环中调用③④
③sendto(sockfd, buff, strlen(buff), 0, (SA*) &servaddr, sizeof(servaddr));
将Buff中的内容发送给servaddr指定的服务器
④n =recvfrom(sockfd, recvline, MAXLINE, 0,NULL,NULL); //不关心谁发送的,可以将后两个参数置空
使用recvline保存recvfrom返回的结果
⑤调用exit(0)
服务器
①sockfd = socket(AF_INET, SOCK_DGRAM, 0);
②struct sockaddr_in servaddr, cliaddr;;//声明两个网际套接字地址结构
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);//绑定服务器端口
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
③bind(sockfd, (SA *)&servaddr, sizeof(servaddr));
在一个循环中调用④⑤
④n = recvfrom(sockfd, recvline, MAXLINE, 0, (SA *)&cliaddr, sizeof(cliaddr));
读取请求信息。使用cliaddr保存发送者地址,因为sendto要用。
⑤sendto(sockfd, buff, strlen(buff), 0,(SA *)&cliaddr, sizeof(cliaddr));//将反馈信息发送给客户端
(1)其实,在UDP客户端中,也可以调用connect函数,只不过和TCP不同,这个时候不在发起三次握手,而只是检测目的是否可达等有没有明显的立即可知的错误。调用connect之后,就可以不必sendto和recvfrom了,直接write和read即可。自动发送给connect的目标协议地址。(多次调用的目的:①指定新的端口②断开已连接)
应用场景:当应用进程知道要给同一目的地址发送多个数据报的时候,显式调用套接字连接效率比较高!!
(2)UDP无流量控制,所以在请求到达服务端的时候,可能会导致缓冲区满而丢包。
(3)TCP可以检测丢失的分组并且重传,验证响应是否来自正确的对端。udp没有自动验证,可以手动验证。
- 面试复习—网络知识点-----UDP
- 面试复习—网络知识点
- 面试复习—网络知识点-----tcp
- 面试复习—Linux知识点
- 面试复习—操作系统知识点
- Android工程师面试— 复习知识点建议
- Android面试复习知识点
- Android面试知识点复习
- 面试复习知识点
- 面试知识点总结——网络篇
- 面试知识点 - 网络
- 网络编程面试知识点
- 网络设计师复习知识点一:ATM网络
- C++面试前必须复习的知识点
- java面试重要知识点复习大纲
- 校招面试知识点复习之计算机网络
- 校招面试知识点复习之计算机网络
- 校招面试知识点复习之计算机网络
- 交换排序算法:快速排序-Quick Sort
- Android零基础入门第35节:Android中基于回调的事件处理
- 初学JAVA04
- web后端--一个小小的下载和防盗链功能
- unix 编辑命令大全(vi/vim)
- 面试复习—网络知识点-----UDP
- 前台页面调试技巧----页面打印console
- java匿名内部类 学习笔记
- Android 7.0 ActivityManagerService(3) 启动Activity的过程:二
- 【Codeforces 839D. Winter is here】& 莫比乌斯反演
- vm dhcp hostname
- C#中DataTable添加列和行的三种方法
- 网络流,增广路,Edmonds_Karp 以及 Dinic 算法(HDU 1532)
- K&R寄存器变量