socket的區域網廣播

2021-07-31 06:50:38 字數 3279 閱讀 9973

很多區域網都定義了乙個特殊的保留位址, 稱為廣播位址. 當資訊頭中目的位址域的內容為廣播位址時, 該幀被區域網上所有計算機接收. 

這個過程稱為廣播.合法的廣播位址就是主機的網路位址加上最大的主機號。網路位址通過機器的ip位址與子網掩碼按位與得出,我們

以ip位址為10.78.202.175 ,子網掩碼為255.0.0.0。

好了,說白了向區域網傳送廣播,就是向ip位址為255.255.255.255的指定埠傳送資料。當然,由於此ip的使用者根本就不存在,那麼,

你就只能選擇使用udp的方式傳送資料。

同時,當你將一組資料傳送到路由,它發現使用者的ip是255.255.255.255。那麼這時,它會立刻明白,好哇,原來你是想將資料發往整個

網路(這裡包括外網和內網),它當然不會允許你這麼幹,但是又不能不發,於是他就將資料發往內網的每個使用者。

1.首先建立socket

[cpp]view plain

copy

print?

cfd = socket(af_inet,sock_dgram,0)  

2.udp預設不支援廣播,你需要開啟

[cpp]view plain

copy

print?

intn = 1;  

//  0表示關閉屬性,非0表示開啟屬性

setsockopt(cfd,sol_socket,so_broadcast,&n,sizeof

(n));  

3.設定你要講資料發給誰

[cpp]view plain

copy

print?

struct

sockaddr_in si;  

si.sin_family = af_inet;  

si.sin_port = htons(8000);  

si.sin_addr.s_addr = inet_addr("255.255.255.255"

);  

4.廢話少說,傳送資料吧

[cpp]view plain

copy

print?

sendto(cfd,buffer,buffer_size,0,(

struct

sockaddr *)&si,

sizeof

(si));  

5.養成好習慣,最後被忘了關閉socket

[cpp]view plain

copy

print?

close(cfd);  

1.開啟socket

[cpp]view plain

copy

print?

intcfd = socket(af_inet, sock_dgram, 0);  

2.將你的socket與指定的埠繫結,用於接受資料,你懂得

[cpp]view plain

copy

print?

struct

sockaddr_in  si;  

si.sin_family = af_inet;  

si.sin_port = htons(8000);//這裡的埠要與上面的埠保持一致,親,你注意到了沒?

si.sin_addr.s_addr = inaddr_any;   

intret = bind(cfd, (

struct

sockaddr *)&si, 

sizeof

(si));  

3.好了,可以開始接受資料了

[cpp]view plain

copy

print?

recv(cfd,buf,22,0);  

4.還是那句話,用完記得還

[cpp]view plain

copy

print?

close(cfd);  

源**:

傳送者:

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

intmain()  

close(cfd);  

return

0;  

}  

接受者:

[cpp]view plain

copy

print?

#include 

#include /* see notes */

#include 

#include 

#include 

intmain()  

struct

sockaddr_in  si;  

intaddrlen = 

sizeof

(si);  

bzero(&si,addrlen);  

si.sin_family = af_inet;  

si.sin_port = htons(8000);  

si.sin_addr.s_addr = inaddr_any;    

//繫結

intret = bind(cfd, (

struct

sockaddr *)&si, 

sizeof

(si));  

if(ret == -1)  

char

buf[22];  

struct

sockaddr_in si_recv;  

addrlen = sizeof

(si_recv);  

bzero(&si_recv,addrlen);  

si_recv.sin_family = af_inet;  

si_recv.sin_port = htons(8000);  

si_recv.sin_addr.s_addr = inaddr_any;    

while

(1)  

close(cfd);  

return

0;  

}  **: 

socket的區域網廣播

很多區域網都定義了乙個特殊的保留位址,稱為廣播位址.當資訊頭中目的位址域的內容為廣播位址時,該幀被區域網上所有計算機接收.這個過程稱為廣播.合法的廣播位址就是主機的網路位址加上最大的主機號。網路位址通過機器的ip位址與子網掩碼按位與得出,我們 以ip位址為10.78.202.175 子網掩碼為255...

區域網socket廣播資料報

在ipv4中報文的傳輸分為三種方式 單播,廣播,多播 兩者的區別就是,本地廣播在不知道目標主機的網路位址下,如果目標主機是在本地網路,可以傳送本地廣播,本地網路下的所有主機都能接收廣播。直接廣播是目標主機的網路位址知道,那該網路位址網段下的所有主機都能收到廣播,直接廣播更精確範圍更小些 初始化網路庫...

socket區域網傳輸檔案

server用於接收來自client傳送的檔案。server和client位於同乙個區域網內就可以進行通訊。檔案讀寫必須用二進位制方式。有client連線時,開始接收資料,儲存為檔案。include include include include include include using name...