一、單播
前面介紹的資料報傳送方式只有乙個接受方,稱為單播。
二、廣播
同時發給區域網中的所有主機,稱為廣播。只有使用者資料報(使用udp協議)套接字才能廣播。
三、廣播位址
1、以192.168.1.0 (255.255.255.0) 網段為例,最大的主機位址192.168.1.255代表該網段的廣播位址。
2、發到該位址的資料報被所有的主機接收。
3、255.255.255.255在所有網段中都代表廣播位址。
四、廣播特點
1、一對多(乙個裝置傳送,區域網內所有裝置都能接收到);
2、只能使用udp程式設計;
3、廣播是注意防範網路風暴,慎用(其實很多路由器是禁止廣播的)。
廣播傳送相當於客戶端client。
一、建立使用者資料報套接字
預設建立的套接字不允許廣播資料報,需要用setsockopt () 函式設定套接字屬性。
二、指定接收方位址指定為廣播位址。
三、指定埠資訊。
四、傳送資料報。
一、套接字屬性修改函式
1、函式原型
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
2、引數
a、level : 選項級別(例如sol_socket);
b、optname : 選項名(例如so_broadcast);
c、optval : 存放選項值的緩衝區的位址;
d、optlen : 緩衝區長度;
3、返回值
成功返回0 失敗返回-1並設定errno。
sockfd = socket(,);
……int on = 1;
setsockopt(sockfd, sol_socket, so_broadcast, &on, sizeof(on)); // 套接字屬性修改。
……sendto(;;;;?;
廣播接收相當於伺服器端server。
一、建立使用者資料報套接字
二、繫結本機ip位址和埠
繫結的埠必須和傳送方指定的埠相同。
三、等待接收資料
一、組播(又稱為多播),和廣播比是一種折中的方式。只有加入某個多播組的主機才能收到資料。
二、組播特點
1、一對多(乙個裝置傳送,多播組內所有裝置都能接收到)。
2、只能使用udp程式設計。
3、多播方式既可以發給多個主機,又能避免像廣播那樣帶來過多的負載和引起網路風暴。
一、網路位址分類
a類位址
第1位元組為網路位址,其他3個位元組為主機位址。第1位元組的最高位固定為0
1.0.0.1 – 126.255.255.255
b類位址
第1位元組和第2位元組是網路位址,其他2個位元組是主機位址。第1位元組的前兩位固定為10
128.0.0.1 – 191.255.255.255
c類位址
前3個位元組是網路位址,最後1個位元組是主機位址。第1位元組的前3位固定為110
192.0.0.1 – 223.255.255.255
d類位址(組播位址)
不分網路位址和主機位址,第1位元組的前4位固定為1110
224.0.0.1 – 239.255.255.255
二、組播位址
以上的d類位址才是組播位址。
組播接收相當於伺服器端server。
一、建立使用者資料報套接字
二、加入多播組
三、繫結本機ip位址和埠
繫結的埠必須和傳送方指定的埠相同。
四、等待接收資料
一、結構體型別
struct ip_mreq
;二、建立結構體並清零、賦值
struct ip_mreq mreq;
bzero(&mreq, sizeof(mreq));
mreq.imr_multiaddr.s_addr = inet_addr(「235.10.10.3」);
mreq.imr_inte***ce.s_addr = htonl(inaddr_any);
三、加入組播組
setsockopt(sockfd, ipproto_ip, ip_add_membership, &mreq,
sizeof(mreq));
一、unix域套接字也屬於程序間通訊(本地通訊)
套接字socket不僅應用於網路通訊,也能應用於程序間本地通訊。unix域套接字和其他程序間通訊方式相比使用方便、效率更高。常用於前後臺程序通訊。
、程序間通訊方式總結1、資料共享方式
管道;訊息佇列;共享記憶體;unix域套接字。
a、易用性排序:訊息佇列》unix域套接字》管道》共享記憶體(經常和訊號量配合使用)。
b、效率排序:共享記憶體》unix域套接字》管道》訊息佇列。
c、常用的資料共享方式:共享記憶體和unix域套接字。
2、非同步通訊方式
訊號3、同步或互斥機制(資源保護)
訊號量;訊號量集。
注:訊號與訊號量(訊號量集)差別很大,要注意區分。
一、本地位址結構
二、填充位址結構
struct sockaddr_un myaddr;
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = af_unix;
strcpy(myaddr.sun_path, 「/tmp/mysocket」);
一、伺服器端
1、socket(af_unix, sock_stream, 0);
2、bind(,本地位址,);
3、listen(,);
4、accept(,,);
5、recv() / send();
二、客戶端
1、socket(pf_unix, sock_stream, 0);
2、bind(,本地位址, ); // 可選。
3、connect(,,);
4、recv() / send();
一、伺服器端
二、客戶端
Linux網路程式設計之擴充套件 上
將網域名稱變為ip位址。gethostbyname endhostent 1 gethostname 獲得主機名。2 getpeername 獲得與套介面相連的遠端協議位址。3 getsockname 獲得本地套介面協議位址。4 gethostbyname endhostent 根據主機名取得主機資...
Linux網路程式設計之廣播
1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...
Linux網路程式設計之廣播
1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...