欢迎来到天天文库
浏览记录
ID:41037684
大小:191.71 KB
页数:8页
时间:2019-08-14
《技术分析基本 UDP 套接字编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、技术分析:基本UDP套接字编程UDP协议和TCP协议不同,它是一种面向无连接、不可靠的传输层协议。在基于UDP套接字编程中,数据传输可用函数sendto和recvfrom。以下是基本UDP套接字编程过程:sendto与recvfrom函数这两个函数的功能类似于write和read函数,可用无连接的套接字编程。其定义如下:1./* 函数功能:发送数据; 2. * 返回值:若成功则返回已发送的字节数,若出错则返回-1; 3. * 函数原型: 4. */ 5.#include
2、 6. 7.ssize_t sendto(int sockfd, void *buff, size_t nbytes, int flags, 8. const struct sockaddr *destaddr, socklen_t addrlen); 9. 10./* 说明: 11. * 该函数功能类似于write函数,除了有标识符flags和目的地址信息之外,其他参数一样; 12. * 13. * flags标识符取值如下: 14. * (1)MSG_DO
3、NTROUTE 勿将数据路由出本地网络 15. * (2)MSG_DONTWAIT 允许非阻塞操作 16. * (3)MSG_EOR 如果协议支持,此为记录结束 17. * (4)MSG_OOB 如果协议支持,发送带外数据 18. * 19. * 若sendto成功,则只是表示已将数据无错误的发送到网络,并不能保证正确到达对端; 20. * 该函数通过指定目标地址允许在无连接的套接字之间发送数据(例如UDP套接字); 21. */ 22. 23. /
4、* 函数功能:接收数据; 24. * 返回值:以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,若出错则返回-1; 25. * 函数原型: 26. */ 27.#include 28. 29.ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, 30. struct sockaddr *addr, socklen_t *addrlen)
5、; 31. /* 说明: 32. * 该函数功能与read类似; 1. * 若addr为非空时,它将包含数据发送者的套接字地址; 2. * 3. * flags标识符取值如下: 4. * (1)MSG_WAITALL 等待所有数据可用 5. * (2)MSG_DONTWAIT 允许非阻塞操作 6. * (3)MSG_PEEK 查看已读取的数据 7. * (4)MSG_OOB 如果协议支持,发送带外数据 8. */ 基于UDP套
6、接字编程下面我们使用UDP协议实现简单的功能,客户端从标准输入读取数据并把它发送给服务器,服务器接收到数据并把该数据回射给客户端,然后客户端收到从服务器回射的数据把它显示到标准输出。其功能实现如下图所示:服务器程序1./* UDP 服务器 */ 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include
7、 8. 9.#define SERV_PORT 9877 /* 通用端口号 */ 10. 11.extern void err_sys(const char *, ...); 12.extern void dg_echo(int sockfd, struct sockaddr *addr, socklen_t addrlen); 13. 14.int main(int argc, char **argv) 15.{ 16. int sockfd
8、; 17. int err; 1. struct sockaddr_in servaddr, cliaddr; 2. 3. /* 初始化服务器地址信息 */ 4. bzero(&servaddr, sizeof(servaddr)); 5. servaddr.sin_family = AF_INET; 6.
此文档下载收益归作者所有