今天在工作的時候遇到了乙個問題,將乙個socket bind到乙個sockaddr_in
上後,廣播不出去。後來查詢資料發現廣播需要使用兩個sockaddr_in
。乙個sockaddr_in用來bind socket,乙個sockaddr_in在sendto的時候使用。具體**如下:
廣播客戶端:
#pragma comment(lib, "ws2_32.lib")
int _tmain(int argc, _tchar* argv)
if ( lobyte( wsadata.wversion ) != 2 || hibyte( wsadata.wversion ) != 2 )
// 建立socket
socklistener=socket(af_inet, sock_dgram,0);
setsockopt(socklistener,sol_socket, so_broadcast, (char*)&bopt, sizeof(bopt));
// 用來繫結套接字
sin.sin_family = af_inet;
sin.sin_port = htons(7001);//傳送端使用的傳送埠,可以根據需要更改
sin.sin_addr.s_addr = 0;
// 用來從網路上的廣播位址接收資料
saclient.sin_family = af_inet;
saclient.sin_port = htons(7001);
saclient.sin_addr.s_un.s_addr = inaddr_broadcast;
if(bind( socklistener, (sockaddr far *)&sin, sizeof(sin))!=0)
while(1)
crecvbuff[nbsize] = '\0';
printf("%s\n",crecvbuff);
} return 0;
}
廣播伺服器端:
#include "stdafx.h"
#include #pragma comment(lib, "ws2_32.lib")
int _tmain(int argc, _tchar* argv)
socklistener=socket(pf_inet,sock_dgram,0);
setsockopt ( socklistener,sol_socket,so_broadcast,(char *)&fbroadcast,sizeof ( bool ));
sin.sin_family = af_inet;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = htonl(inaddr_any);
if(bind( socklistener, (sockaddr *)&sin, sizeof(sin))!=0)
saudpserv.sin_family = af_inet;
saudpserv.sin_addr.s_addr = htonl ( inaddr_broadcast );
saudpserv.sin_port = htons (7001);//傳送用的埠,可以根據需要更改
nsize = sizeof ( sockaddr_in );
while(1)
return 0;
}
udp的廣播應用
廣播 一點傳送,多點接收 最大位址 用來演示udp的廣播應用 from socket import 建立套接字 sockfd socket af inet,sock dgram 設定套接字可以傳送接收廣播 sockfd.setsockopt sol socket,so broadcast,1 固定接...
UDP 單播 廣播和多播
閱讀目錄 content 三 udp廣播與單播 使用udp協議進行資訊的傳輸之前不需要建議連線。換句話說就是客戶端向伺服器傳送資訊,客戶端只需要給出伺服器的ip位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。單播用於兩個主機之間...
UDP 單播 廣播和多播
閱讀目錄 content 三 udp廣播與單播 使用udp協議進行資訊的傳輸之前不需要建議連線。換句話說就是客戶端向伺服器傳送資訊,客戶端只需要給出伺服器的ip位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。單播用於兩個主機之間...