如果網路中兩個主機上的應用程式要相互通訊,其一要知道彼此的ip,其二要知道程式可監聽的埠。因為同一主機上的程式使用網路是通過埠號來區分的。
1. 初始化網路庫
2. 建立sock_dgram型別的socket。
3. 繫結套接字。
4. 傳送、接收資料。
5. 銷毀套接字。
6. 釋放網路庫。
專門用於同時向網路中所有工作站進行傳送的乙個位址叫做廣播位址。在使用tcp/ip 協議的網路中,主機標識段host id 為全1 的ip 位址為廣播位址。如果你的ip為:192.168.1.39,子網掩碼為:255.255.255.0,則廣播位址為:192.168.1.255;如果ip為192.168.1.39,子網掩碼為:255.255.255.192,則廣播位址為:192.168.1.63。
如果只想在本網路內廣播資料,只要向廣播位址傳送資料報即可,這種資料報可以被路由,它會經由路由器到達本網段內的所有主機,此種廣播也叫直接廣播;如果想在整個網路中廣播資料,要向255.255.255.255傳送資料報,這種資料報不會被路由,它只能到達本物理網路中的所有主機,此種廣播叫有限廣播。
假如我們要向192.168.0.x,子網掩碼為:255.255.255.0的子網中傳送廣播包。
其步驟如下:
1. 初始化winsock庫。
2. 建立sock_diram型別的socket。
3. 設定socket的屬性允許其廣播。
4. 傳送資料報到192.168.0.255
5. 接收自己廣播的廣播包。
6. 關閉socket
7. 釋放網路庫。
注意事項如下:
1. 接收方一定要知道廣播方的口號,然後繫結此埠號才能正確接收。
2. 接收方的socket不需要設定成廣播屬性。
3. 繫結的ip不可以使用「127.0.0.1」,可以使用真實ip位址或者inaddr_any。否則接收失敗。
#include #include #include #include #include #include //*-----------變數,資料型別巨集定義-------------------
#define port 3387
#define max 255
int main(void)
//建立套介面
my_con.sin_family = af_inet;
my_con.sin_port = ntohs(port);
my_con.sin_addr.s_addr = inet_addr("192.168.1.255");
len = sizeof(struct sockaddr);
setsockopt(sockfd,sol_socket,so_broadcast,&so_broadcast,sizeof(so_broadcast));
//繫結套介面
if(bind(sockfd, (struct sockaddr *) &my_con, len) < 0)
//資料傳輸處理
ret = sendto(sockfd, snd, strlen(snd), 0, (struct sockaddr *) &my_con, len);
if(ret < 0)
printf("傳送廣播資料:%s\n",snd);
size=sizeof(cl_con);
ret = recvfrom(sockfd,rec,max,0,(struct sockaddr *)&cl_con,&size);
rec[ret] = '\0';
printf("接收廣播資料:%s\n",rec);
close(sockfd);
return 0;
}
UDP 收 發 廣播包
如果網路中兩個主機上的應用程式要相互通訊,其一要知道彼此的ip,其二要知道程式可監聽的埠。因為同一主機上的程式使用網路是通過埠號來區分的。1.初始化網路庫 2.建立sock dgram型別的socket。3.繫結套接字。4.傳送 接收資料。5.銷毀套接字。6.釋放網路庫。專門用於同時向網路中所有工作...
UDP收 發廣播包過程
udp收 發廣播包過程 如果網路中兩個主機上的應用程式要相互通訊,其一要知道彼此的ip,其二要知道程式可監聽的埠。因為同一主機上的程式使用網路是通過埠號來區分的。udp socket的使用過程 1.初始化網路庫 2.建立sock dgram型別的socket。3.繫結套接字。4.傳送 接收資料。5....
winsock 收發廣播包
廣播包的概念 廣播包通常為了如下兩個原因使用 1 乙個應用程式希望在本地網路中找到乙個資源,而應用程式對於該資源的位址又沒有任何先驗的知識。2 一些重要的功能,例如路由要求把它們的資訊傳送給所有找到的鄰機。被廣播資訊的目的位址取決於這一資訊將在何種網路上廣播。internet域中支援乙個速記位址用於...