伺服器端://
#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得到廣播的...