基於UDP協議的廣播程式例項

2021-04-09 04:37:25 字數 1748 閱讀 5730

今晚寫了乙個簡單的區域網內同一子網的廣播程式,總結起來關鍵 點主要是:

2。廣播訊息只能給予udp協議,原因是udp是面向無連線的,不像tcp一樣正式通訊之前要進行「三次握手」,從而建立端對端(end to end)的連線。

3。設定好socket的工作方式,即設定為廣播方式。呼叫setsockopt(.....)函式實現

以下是實現的**(最精簡的):

1。傳送訊息方:

#define inaddr_broadcast (u_long)0xffffffff

void cserverdlg::onbnclickedbutton1()

socket server=socket(af_inet,sock_dgram,ipproto_udp);

server_addr.sin_addr.s_un.s_addr=inaddr_any;

server_addr.sin_family=af_inet;

//server_addr.sin_port=htons();

//bind(server,(sockaddr*)&server_addr,sizeof(server_addr));

char buff[255];

cstring strtext;

getdlgitem(idc_edit1)->getwindowtext(strtext);

strcpy(buff,strtext);

afxmessagebox(buff);

int ilen=sizeof(buff);

client_addr.sin_addr.s_un.s_addr=inaddr_broadcast;

client_addr.sin_family=af_inet;

client_addr.sin_port=htons(8000);

bool bbroadcast;

//設定廣播工作方式,關鍵

setsockopt(server,sol_socket,so_broadcast,(char*)&bbroadcast,sizeof(bbroadcast));

sendto(server,buff,ilen,0,(sockaddr*)&client_addr,sizeof(client_addr));

closesocket(server);

wsacleanup();

}接收訊息方:

void cclientdlg::onbnclickedbutton1()

socket client=socket(af_inet,sock_dgram,ipproto_udp);

client_addr.sin_addr.s_un.s_addr=inaddr_any;

client_addr.sin_family=af_inet;

client_addr.sin_port=htons(8000);

bind(client,(sockaddr*)&client_addr,sizeof(client_addr));

char buff[255];

int ilen;

ilen=sizeof(server_addr);

while (1)

getdlgitem(idc_edit1)->setwindowtext(buff);

closesocket(client);

wsacleanup();

以上為阻塞式通訊方式,通過直接的api函式實現。若用mfc windows socket 類則更加方便實用。程式在宿舍樓區域網執行通過~

利用UDP協議實現廣播通訊

在開發應用程式時,如果需要向網路中的所有使用者傳送資訊,可以採用udp協議進行廣播通訊,而不用一一向每個使用者傳送訊息。在程式中使用廣播通訊非常簡單,在建立套接字後,呼叫 setsockopt 方法使套接字具有so broadcast選項。然後再傳送訊息時,降低至設定為廣播形式。建立套接字 m ps...

用UDP協議實現廣播通訊

udp 是user datagram protocal 的簡稱,是一種在網路上提供的無連線的傳輸協議。用udp通訊有以下特點 具體實現很簡單,但是現在在網路上很少看到這方面的 我也參考了vckbase上的關於udp通訊的原 和一些書籍,寫了這個簡單的客戶端,接收端程式,起到拋磚引玉的作用,希望能給初...

基於QT的UDP協議的通訊小程式

include include include include include class dialog public qdialog endif udp1.cpp include udp1.h include dialog dialog void dialog send slot include ...