日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 运维知识 > linux >内容正文

        linux

        Linux下的UDP通信

        發布時間:2023/12/20 linux 30 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 Linux下的UDP通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

        socket()函數

        函數說明:建立新的socket通信
        頭文件
        #include<sys/socket.h>
        #include<sys/types.h>
        函數定義:int socket(int domain,int type,int protocol)
        domain:IP地址類型,常用的有 AF_INET 和 AF_INET6。AF_INET 表示 IPv4 地址,例如 127.0.0.1;AF_INET6 表示 IPv6 地址,例如 1030::C9B4:FF12:48AA:1A2B。
        type:數據傳輸方式/套接字類型
        protocol:傳輸協議,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分別表示 TCP 傳輸協議和 UDP 傳輸協議。
        返回值:函數調用成功,會返回一個標識這個套接字的文件描述符,失敗的時候返回-1。

        bind()函數

        函數說明:對套接字進行地址和端口的綁定
        頭文件
        #include<sys/types.h>
        #include<sys/socket.h>
        函數定義:int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
        sockfd:socket()函數創建返回的文件描述符
        my_addr:要綁定的地址信息,IP和端口
        addrlen:地址長度
        返回值:成功則返回0, 失敗返回-1

        sendto()函數

        函數說明:將數據由指定的socket 傳給對方主機
        頭文件
        #include<sys/types.h>
        #include<sys/socket.h>
        函數定義:int sendto(int sockfd, const void * buf, int len, unsigned int flags, const struct sockaddr * addrto, int addrlen);
        sockfd:socket()函數創建返回的文件描述符
        buf:要傳送的數據地址
        len:字符長度
        addr:要綁定的地址信息,IP和端口
        addrlen:地址長度
        返回值:成功則返回實際傳送出去的字符數, 失敗返回-1

        recvfrom()函數

        函數說明:接收遠程主機經指定的socket 傳來的數據, 并把數據存到由參數buf 指向的內存空間
        頭文件
        #include<sys/types.h>
        #include<sys/socket.h>
        函數定義:int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *addrfrom,int *addrlen);
        sockfd:socket()函數創建返回的文件描述符
        buf:要傳送的數據地址
        len:字符長度
        addr:要綁定的地址信息,IP和端口
        addrlen:地址長度
        返回值:成功則返回實際傳送出去的字符數, 失敗返回-1

        inet_addr()函數

        函數說明:將參數cp 所指的網絡地址字符串轉換成網絡所使用的二進制數字
        頭文件
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        函數定義:unsigned long int inet_addr(const char *cp);
        返回值:成功則返回對應的網絡二進制的數字, 失敗返回-1

        htons()函數

        函數說明: 將一個無符號短整型數值轉換為網絡字節序
        頭文件
        #include <arpa/inet.h> 
        函數定義:uint16_t htons(uint16_t hostshort);

        UDP客戶端

        文件名:client.cpp
        編譯命令:g++ client.cpp -o client
        運行命令:./client 127.0.0.1

        #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<unistd.h> #include<stdlib.h> #include<iostream> using std::cout; using std::endl; #define PORT 4567 int main(int argc, char *argv[]) {int udpfd = socket(AF_INET,SOCK_DGRAM,0);if(udpfd == -1){cout << "socket failed!!" << endl;return -1;}char *ip = argv[1];struct sockaddr_in destAddr = {0};destAddr.sin_family = AF_INET;destAddr.sin_port = htons(PORT);destAddr.sin_addr.s_addr = inet_addr(ip);char buf[1024] = {0};while(1){buf[0] = '3';sendto(udpfd,buf,sizeof(buf),0,(struct sockaddr*)& destAddr,sizeof(destAddr));}close(udpfd);return 0; }

        UDP服務端

        文件名:server.cpp
        編譯命令:g++ server.cpp -o server
        運行命令:./server 127.0.0.1 4567

        #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<unistd.h> #include<stdlib.h> #include<iostream> using std::cout; using std::endl;int main(int argc, char *argv[]) {if(argc != 3){cout << "Usage:./UDPsrv IP Port" << endl;return -1;} }int port = atoi(argv[2]);int udpfd = socket(AF_INET,SOCK_DGRAM,0);if(udpfd == -1){cout << "socket failed!!" << endl;return -1;}struct sockaddr_in localAddr = {0};localAddr.sin_family = AF_INET;localAddr.sin_port = htons(port);localAddr.sin_addr.s_addr = INADDR_ANY;scoklen_t len = sizeof(localAddr);int ret = bind(udpfd,(struct sockaddr*)&localAddr,sizeof(localAddr));if(ret < 0){cout << "bind fail!" << endl;close(udpfd);return -1;}char buf[1024] = {0};while(1){ret = recvfrom(udpfd,buf,sizeof(buf),0,(struct sockaddr *)&localAddr,&len);cout << buf << endl; }close(udpfd);return 0; }

        總結

        以上是生活随笔為你收集整理的Linux下的UDP通信的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。