關於udp的廣播和普通鏈結

2021-06-25 09:40:40 字數 1731 閱讀 3400

今天在工作的時候遇到了乙個問題,將乙個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位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。單播用於兩個主機之間...