局域網(wǎng)用UDP協(xié)議實(shí)現(xiàn)廣播通信
DP 是USER DATAGRAM PROTOCAL 的簡(jiǎn)稱(chēng),是一種在網(wǎng)絡(luò)上提供的無(wú)連接的傳輸協(xié)議。下面是學(xué)習(xí)啦小編收集整理的局域網(wǎng)用UDP協(xié)議實(shí)現(xiàn)廣播通信,希望對(duì)大家有幫助~~
局域網(wǎng)用UDP協(xié)議實(shí)現(xiàn)廣播通信
步驟/方法
啟動(dòng)SOCKET庫(kù),版本為2.0
WSAStartup(0x0202,&wsdata);
然后賦值給兩個(gè)地址,一個(gè)用來(lái)綁定套接字,一個(gè)用來(lái)從網(wǎng)絡(luò)上的廣播地址接收消息;
......
a.sin_family=AF_INET;
a.sin_addr.s_addr=0;
a.sin_port=htons(5050);
from.sin_family=AF_INET;
from.sin_addr.s_addr=INADDR_BROADCAST;
from.sin_port=htons(5050);
int fromlength=sizeof(SOCKADDR);
//用UDP初始化套接字
s=socket(AF_INET,SOCK_DGRAM,0);
//設(shè)置該套接字為廣播類(lèi)型,
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
//把該套接字綁定在一個(gè)具體的地址上
bind(s,(sockaddr *)&a,sizeof(sockaddr_in));
char buf[256];
while(1)
{ //從廣播地址接收消息,注意用來(lái)綁定的地址和接收消息的地址是不一樣的
recvfrom(s,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength);
Sleep(2000);
printf("%s\n",buf);
ZeroMemory(buf,256);
}
.....
無(wú)連接協(xié)議不用LISTEN也不用ACCEPT,他直接從廣播地址上接收消息,但我們必須要設(shè)置該套接字為廣播類(lèi)型。
發(fā)送端的程序比較簡(jiǎn)單,只要將發(fā)送地址改為廣播地址,設(shè)置套接字為BROADCAST類(lèi)型就行,具體實(shí)現(xiàn)細(xì)節(jié)請(qǐng)參見(jiàn)源代碼。
在VC6。0 WIN 2000下運(yùn)行通過(guò)。
局域網(wǎng)用UDP協(xié)議實(shí)現(xiàn)廣播通信相關(guān)文章: