国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C語言socket UDP廣播的發(fā)送和接收示例
userphoto

2014.12.15

關注

server.c通過UDP廣播的形式向網(wǎng)段的指定端口發(fā)送廣播信息

client.c綁定到指定端口,并阻塞接收廣播內(nèi)容然后打印出來

程序非常簡單,不過有一點需要注意,那就是setsockopt()函數(shù)的使用。使用不當很可能會出問題。通過SO_REUSEADDR選項可以實現(xiàn)端口號的重用,SO_BROADCAST選項表示要發(fā)送的是廣播信息,optval參數(shù)要給合理的初始值(這里是1),否則很可能會發(fā)送失敗

(sendto() permission denied)

發(fā)送廣播的程序:

  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. #include<string.h>  
  4. #include<sys/types.h>  
  5. #include<sys/socket.h>  
  6. #include<sys/wait.h>  
  7. #include<netinet/in.h>  
  8. #include<arpa/inet.h>  
  9. #include<errno.h>  
  10. int main(){  
  11.     char msg[128] = "I am broadCast message from server!";  
  12.     int brdcFd;  
  13.     if((brdcFd = socket(PF_INET, SOCK_DGRAM, 0)) == -1){  
  14.         printf("socket fail\n");  
  15.         return -1;  
  16.     }  
  17.     int optval = 1;//這個值一定要設置,否則可能導致sendto()失敗  
  18.     setsockopt(brdcFd, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int));  
  19.     struct sockaddr_in theirAddr;  
  20.     memset(&theirAddr, 0, sizeof(struct sockaddr_in));  
  21.     theirAddr.sin_family = AF_INET;  
  22.     theirAddr.sin_addr.s_addr = inet_addr("255.255.255.255");  
  23.     theirAddr.sin_port = htons(4001);  
  24.     int sendBytes;  
  25.     if((sendBytes = sendto(brdcFd, msg, strlen(msg), 0,  
  26.             (struct sockaddr *)&theirAddr, sizeof(struct sockaddr))) == -1){  
  27.         printf("sendto fail, errno=%d\n", errno);  
  28.         return -1;  
  29.     }  
  30.     printf("msg=%s, msgLen=%d, sendBytes=%d\n", msg, strlen(msg), sendBytes);  
  31.     close(brdcFd);  
  32.     return 0;  
  33. }  


接收程序:

  1. #include<stdlib.h>  
  2. #include<stdio.h>  
  3. #include<string.h>  
  4. #include<sys/types.h>  
  5. #include<netinet/in.h>  
  6. #include<netdb.h>  
  7. #include<sys/socket.h>  
  8. #include<sys/wait.h>  
  9. #include<arpa/inet.h>  
  10. int main(){  
  11.     int sockListen;  
  12.     if((sockListen = socket(AF_INET, SOCK_DGRAM, 0)) == -1){  
  13.         printf("socket fail\n");  
  14.         return -1;  
  15.     }  
  16.     int set = 1;  
  17.     setsockopt(sockListen, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(int));  
  18.     struct sockaddr_in recvAddr;  
  19.     memset(&recvAddr, 0, sizeof(struct sockaddr_in));  
  20.     recvAddr.sin_family = AF_INET;  
  21.     recvAddr.sin_port = htons(4001);  
  22.     recvAddr.sin_addr.s_addr = INADDR_ANY;  
  23.     // 必須綁定,否則無法監(jiān)聽  
  24.     if(bind(sockListen, (struct sockaddr *)&recvAddr, sizeof(struct sockaddr)) == -1){  
  25.         printf("bind fail\n");  
  26.         return -1;  
  27.     }  
  28.     int recvbytes;  
  29.     char recvbuf[128];  
  30.     int addrLen = sizeof(struct sockaddr_in);  
  31.     if((recvbytes = recvfrom(sockListen, recvbuf, 128, 0,  
  32.         (struct sockaddr *)&recvAddr, &addrLen)) != -1){  
  33.         recvbuf[recvbytes] = '\0';  
  34.         printf("receive a broadCast messgse:%s\n", recvbuf);  
  35.     }else{  
  36.         printf("recvfrom fail\n");  
  37.     }  
  38.     close(sockListen);  
  39.     return 0;  
  40. }  


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SOCKET UDP組播 實例
Linux網(wǎng)絡編程一步一步學-UDP方式點對點通訊
關于UDP接收icmp端口不可達(port unreachable)
c語言udp通信實例(linux)
udp客戶端和服務代碼
udp實例代碼
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服