主页 > 创业  > 

UDP通信开发

UDP通信开发
开发流程:

UDP本身不考虑链接,不存在客户和服务器的概念,

UDP开发只有三步:

创建UDP的套接字 socket(AF_INET,SOCK_DGRAM,0)绑定自己的属性bindUDP随意的发送和接收数据sendto / recvfrom UDP接口函数: sendto()

函数功能:UDP专用的发送函数

函数原型:

ssize_t sendto(int sockfd, //套接字

                        const void *buf, //待发送的数据

                        size_t len, //待发送的数据的长度

                        int flags, //填0/MSG_DONTWAIT->阻塞/非阻塞发送

                        const struct sockaddr *dest_addr, //目标地址

                        socklen_t addrlen);//目标地址长度

函数返回值:发送成功返回发送的字节数,失败返回-1

recvfrom()

函数功能:接受指定目标的数据

函数原型:

ssize_t recvfrom(int sockfd, //套接字

                                void *buf, //待接收的数据存放地址

                                size_t len, //待接收的数据长度

                                int flags, //填入0/MSG_DONTWAIT->阻塞/非阻塞接收

                                struct sockaddr *src_addr, //指定的接收目标地址/不指定NULL

                                socklen_t *addrlen);   //目标地址的长度   

函数返回值:发送成功返回发送的字节数,失败返回-1

UDP的发送和接收 通过UDP发送数据简易测网速:  #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "pthread.h" int count =0; void * test(void * arg); int main() { //1:创建一个  UDP套接字     int  udp_socket = socket(AF_INET, SOCK_DGRAM, 0); //2:绑定自身的属性     struct sockaddr_in my_addr={0};     my_addr.sin_family = AF_INET;//IPV4     my_addr.sin_port   = htons(1111);//端口号     my_addr.sin_addr.s_addr = 0;//任何IP         /*             0.0.0.0 ->自动匹配电脑的IP         */     int ret = bind(udp_socket, (struct sockaddr *)&my_addr, sizeof(my_addr)); //3:不断的发送数据     struct sockaddr_in send_addr;     send_addr.sin_family = AF_INET;     send_addr.sin_port   = htons(8888);     send_addr.sin_addr.s_addr =inet_addr("192.168.222.128");     char buf[1024] = {0}; // 1K空间     pthread_t tid;     pthread_create(&tid, NULL, test, NULL);     while(1)     {         //sleep(1);         sendto(                 udp_socket,  //套接字                 buf,1024,   //数据和长度                 0,           //阻塞                 (struct sockaddr *)&send_addr,//发送对象属性                 sizeof(send_addr) //属性结构体大小         );         count++;         //printf("发送成功!len == %d\r\n",len);     }        return 0; } void * test(void * arg) {     int current = 0;     while(1)     {           sleep(1);        current =  count;            count = 0;        printf("网速==%d MB/s\r\n",current/1024);     } }  UDP接收数据: #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { //1:创建了一个 UDP套接字     int skd = socket(AF_INET, SOCK_DGRAM, 0); //2:绑定自身的属性     struct sockaddr_in my_addr={0};     my_addr.sin_family = AF_INET;//IPV4     my_addr.sin_port = htons(8888); // 端口号     my_addr.sin_addr.s_addr = inet_addr("192.168.222.128");     bind(skd, (struct sockaddr *)&my_addr, sizeof(my_addr)); //3:不断的接收数据     char buf[1024] = {0}; //4:关闭套接字     struct sockaddr_in rev_addr;     socklen_t  len = sizeof(rev_addr);     while(1)     {         memset(buf,0,1024);         recvfrom(skd,buf,1024,0,(struct sockaddr *)&rev_addr,&len);         printf("介绍到UPD发送来数据 == %s\r\n",buf);         printf("发送消息的人的端口号 ==%d\r\n ",ntohs(rev_addr.sin_port));     } }

标签:

UDP通信开发由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“UDP通信开发