網路程式設計 廣播

2021-06-20 22:41:59 字數 3159 閱讀 5206

伺服器端://

#include "stdio.h"

#include using namespace std;

#include #include #pragma comment(lib, "wsock32.lib")

#define server_exit_ok 0 //伺服器正常退出

#define server_dll_reeor 1 //呼叫windows sockets dll失敗

#define server_api_error 2 //呼叫windows sockets api失敗

#define serverport 5555//伺服器tcp埠

#define max_num_buf 64 //緩衝區最大尺寸

//變數

char bufrecv[max_num_buf]; //讀緩衝區

char bufsend[max_num_buf]; //寫緩衝區

socket sserver; //伺服器監聽套接字

bool bconning; //與客戶端的連線狀態

//函式

void initmember(void); //初始化成員變數

int exitclient(int nexit); //客戶端退出

int handlesocketerror(char *str); //對windows sockets api呼叫錯誤處理

//主函式

int main(int argc, char* argv)

//確保winsock dll支援1.1

if ( lobyte( wsadata.wversion ) != 1 || hibyte( wsadata.wversion ) != 1)

//建立乙個資料報套接字用於傳送廣播資訊

sserver = socket(af_inet, sock_dgram, 0);//udp(sock_dgram)

if(invalid_socket == sserver)

//設定廣播選項,使so_broadcast選項有效

bool bbroadcast = true;

setsockopt(sserver, sol_socket, so_broadcast,

(char*)&bbroadcast, sizeof(bool));

/*sockfd:標識乙個套介面的描述字。

level:選項定義的層次;支援sol_socket、ipproto_tcp、ipproto_ip和ipproto_ipv6。

optname:需設定的選項。

optval:指標,指向存放選項值的緩衝區。

optlen:optval緩衝區長度。*/

//設定廣播位址及廣播埠號,這時的接收方位址應該設為位址inaddr_broadcast

sockaddr_in bcast;

bcast.sin_addr.s_addr = inaddr_broadcast;

//::inet_addr("255.255.255.255");

bcast.sin_family = af_inet;

bcast.sin_port = htons(serverport);

//繫結套接字

retval = bind(sserver, (lpsockaddr)&bcast, sizeof(sockaddr_in));

printf(" 開始向網路中傳送廣播資料... \n \n");

char sz = "this is just a test. \r\n";

while(true)

//退出

return exitclient(server_exit_ok);}/*

* 初始化成員變數

*/void initmember(void)

/* * 錯誤處理

*/int handlesocketerror(char *str)

//建立乙個資料報套接字用於接收廣播資訊

sclient = socket(af_inet, sock_dgram, 0);

if(invalid_socket == sclient)

lphostent hostentry;

char hostname[max_num_buf];

gethostname(hostname,max_num_buf); //獲取主機名稱

hostentry = gethostbyname(hostname); //獲取主機資訊

if(!hostentry)

printf(" 開始接收廣播資料... \n\n");

//繫結乙個本地位址,指明廣播埠號(要和傳送方設定埠號的相同)作為接收埠。

sockaddr_in addrremote;

addrremote.sin_family = af_inet;

addrremote.sin_addr = *((lpin_addr)*hostentry->h_addr_list);

= inet_addr("10.20.255.183");

addrremote.sin_port = htons(serverport);

retval = bind(sclient, (lpsockaddr)&addrremote, sizeof(sockaddr_in));

int nlen = sizeof(addrremote);

char sz[256];

while(true) }

//退出

return exitclient(server_exit_ok);}/*

* 初始化成員變數

*/void initmember(void)

/* * 錯誤處理

*/int handlesocketerror(char *str)

{ cout<

伺服器端:

客戶端:

linux網路程式設計 廣播

recv include include include include include include include see notes include include include include define myport 5009 define myaddr 192.168.1.34 v...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...