那些做seo的网站,wordpress主题制作下载地址,开发手机app难吗,百度搜索引擎api我最近开了几个专栏#xff0c;诚信互三#xff01; |||《算法专栏》#xff1a;#xff1a;刷题教程来自网站《代码随想录》。||| |||《C专栏》#xff1a;#xff1a;记录我学习C的经历#xff0c;看完你一定会有收获。||| |||《Linux专栏》#xff1… 我最近开了几个专栏诚信互三 |||《算法专栏》刷题教程来自网站《代码随想录》。||| |||《C专栏》记录我学习C的经历看完你一定会有收获。||| |||《Linux专栏》记录我学习Linux的经历看完你一定会有收获。||| |||《C#专栏》记录我复习C#的经历深度理解查漏补缺不定期更新。||| |||《计算机网络专栏》记录我学习计算机网络看完你一定会有收获。||| Linux udp编程 udp通信原理udp通信接口socket创建网络通信结构体bind port和ip接收信息接口发送信息接口 其他网络接口 udp通信原理
udp是用户数据报协议不面向链接的不可靠传输。 udp协议使用socket进行通信socket包含两个部分(ip-port)可以表示网络中的某个主机和某个进程。 udp通信服务端建立如下 1).创建socket。 2).将socket和本地ip和portbind。 3).使用recvfromsendto接口接收发送信息。 udp客户端建立如下 1).创建socket。 2).本地隐式将sokcet和本地ip和port绑定。 3).使用recvfromsendto接口接收发送信息。 udp通信接口
支持udp通信接口较多。
socket创建
socket接口如下 参数1domain决定通信域其接收一些宏如AF_INET(ipv4)AF_INET(ipv6)同时也可以基于udp进行域间通信还可以进行网络管理还可以跨网络通信。 参数2type决定套接字通信类型依旧接收一个宏如SOCK_DGRAM及代表数据报通信。 参数3protocol当前两个参数决定后该参数传递0。 retval返回一个socket值socket在底层是一个文件描述符上层的进程就是通过该描述符通信的类似于打开网卡。 当domain AF_INETtype SOCK_DGRAM代表udp通信。
网络通信结构体
struct sockaddrstruct sockaddr_instruct sockaddr_un。 sockaddr是父类接口其他接口是子类接口在使用的时候我们都使用sockaddr_in/sockaddr_un但是在使用参数的时候为了保证可以通用一个接口在接口参数设计的时候都使用的是sockaddr。 1).sockaddr_in用于网络间通信其结构体如下。 在该结构体中存在sin_portsin_addr(结构体)sin_family(指定通信域)。 bind port和ip
bind接口如下 参数1sockfd传入一个sock文件描述符代表绑定某个socket。 参数2addr传入当地的要绑定的ip和端口号在服务端sockaddr_in中我们一般不绑定一个确定的ip而通过宏INADDR_ANY来代表当前主机。 参数3addrlen将参数2的大小算出传入其中。 retval小于零代表bind函数错误。 接收信息接口
recvfrom接口如下 参数1sockfd从那个sockfd中接收信息。 参数2buf将接收到的信息放入buf中。 参数3len代表buf中的有效个数。 参数4flag一般传入0. 参数5src_addr为了能够在接收信息后知道信息的发送方传入一个输出参数。 参数6addrlen该参数的类型是一个自定义类型其实代表无符号整型该参数就是传入该类型的指针。 retval返回收到的内容的字节数。 发送信息接口
sendto接口如下 参数1sockfd从那个sockfd中接收信息。 参数2buf将发送的信息放入buf中发送出去。 参数3len代表buf中的有效个数。 参数4flag一般传入0. 参数5dest_addr发送信息的目的sockaddr。 参数6addrlen其实代表无符号整型直接传入一个值。 其他网络接口
在udp通信中还存在许多网络接口如网络字节序转换接口ip字符串到4字节相互转换接口清空内存空间接口等等。 1).网络字节序转换接口 各个主机的字节序不同有的主机是大端字节序有的主机是小端字节序为了确定内容在网络中的传递在网络中传递的数据都是通过大端字节序传递的所以在主机中我们要通过网络通信就要将传递的结构体内容转为大端。 2).ip字符串到4字节相互转换接口 在客户端我们需要传递信息就必须知道目的ip和port需要将字符串ip转换为32位数字ip 存在以下接口 inet_aton接口将点分十进制字符ip转换为in_addr的4字节ip返回值0失败非0成功。 接口inet_ntoa将4字节ip转换为字符串ip该接口返回字符串的地址该接口存在线程安全问题该接口内部会在同一个静态区创建一个字符串并且返回它的地址所以多线程并发访问时会造成线程安全问题。 3).清空内存空间接口 在使用struct sockaddr_in/struct sockaddr_un接口时需要清空内存空间就可以使用bzero接口。