Linux網路程式設計之擴充套件 下

2021-10-03 14:48:48 字數 3361 閱讀 8245

一、單播

前面介紹的資料報傳送方式只有乙個接受方,稱為單播。

二、廣播

同時發給區域網中的所有主機,稱為廣播。只有使用者資料報(使用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得到廣播的...