linux UDP廣播通訊

2021-07-24 15:53:56 字數 2076 閱讀 2623

2013-02-04 10:18

3881人閱讀收藏 

舉報

c 語言(89)

linux system(153)

在除錯區域網內通過udp協議獲取其他裝置ip位址時,伺服器使用udp 廣播後, 客戶端裝置無響應. 先研究一下正常情況下, udp廣播通訊方法. 參考了網路上一寫資料. **整理如下:

伺服器端向: 255.255.255.255:6023傳送udp廣播:

serverudp.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define port 6023

int main()  

const int opt = 1;  

//設定該套接字為廣播型別,  

int nb = 0;  

nb = setsockopt(sock, sol_socket, so_broadcast, (char *)&opt, sizeof(opt));  

if(nb == -1)  

struct sockaddr_in addrto;  

bzero(&addrto, sizeof(struct sockaddr_in));  

addrto.sin_family=af_inet;  

addrto.sin_addr.s_addr=htonl(inaddr_broadcast);  

addrto.sin_port=htons(port);  

int nlen=sizeof(addrto);  

while(1)  

;  int ret=sendto(sock, smsg, strlen(smsg), 0, (struct sockaddr*)&addrto, nlen);  

if(ret<0)  

else  

}  return 0;  

}  客戶端接收廣播訊息.

clientudp.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define port 6023

int main()  

const int opt = 1;  

//設定該套接字為廣播型別,  

int nb = 0;  

nb = setsockopt(sock, sol_socket, so_broadcast, (char *)&opt, sizeof(opt));  

if(nb == -1)  

if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -1)   

int len = sizeof(struct sockaddr_in);  

char smsg[100] = ;  

while(1)  

else  

sleep(1);  

}  return 0;  

}  makefile:

all: server client

server:

gcc serverudp.c -o serverudp

client:

gcc clientudp.c -o clientudp

clean:

rm serverudp clientudp

如區域網內有a裝置, ip為192.168.1.100,  b裝置, ip為192.168.1.101.

在a裝置上執行 ./clientudp &

在b裝置上執行 ./serverudp &

執行結果:

a裝置上一直列印:  abcdef

b裝置上一直列印: ok.

Linux UDP實現廣播

特點 較tcp來講udp無需建立連線可以直接傳送訊息,udp是對網路環境完全不彌補的協議,所以使用dup就要允許有一定的丟包率,udp廣播是面向區域網內所有的裝置的。對比tcp連線時服務端的ip位址的重要性來講,udp廣播中本機的ip顯得並不重要了。在udp廣播中不同於tcp的我們需要對網路套接字設...

linux udp通訊程式

服務端程式為 include include include include include include include int main recvfrom isock,szbuf,sizeof szbuf 1,0,struct sockaddr srvaddr,socklen t srvadd...

Linux UDP廣播報文接收速率問題

專案採用的是3.10.108的kernel,在測試時使用發包功率高速傳送dhcp request報文,發現busybox中的udhcpd 程序狀態為d,抓包看,沒有offer包,而且樣機ping不通。分析發現是在kernel中的函式udp queue rcv skb中 if sk rcvqueues...