Linux網路程式設計之Socket通訊

2021-10-19 12:17:33 字數 2285 閱讀 9277

伺服器端:

socket—bind—listen—accept—write/read—close

客戶端:

socket—connect—write/read—close

1、socket函式的用法

int

socket

(int domain,

int type,

int protocol)

;//返回值為socket套接字檔案描述符,用來監聽連線

/*domain:協議族

ipv4環境使用 af_inet

ipv6環境使用 af_inet6

type:指定socket型別

tcp使用socket_stream

udp使用socket_dgram

protocol:指定協議

預設使用0,系統為你自動安排合適的協議*/

int cfd =

socket

(af_inet, socket_stream,0)

;

2、bind函式的用法

int

bind

(int sockfd,

const

struct sockaddr* addr, socklen_t addrlen)

;//sockfd:socket檔案描述

//ipv4環境下

struct sockaddr_in

;struct in_addr

;//hons函式和htonl函式是將本地位元組序轉化為網路位元組序

//inaddr_any ,會自動獲取服務端的計算機ip位址,方便於多宿主計算機

struct sockaddr_in serv;

serv.sin_family = af_inet;

serv.sin_port =

htons

(port)

;//傳埠號

serv.sin_addr.s_addr =

htonl

(inaddr_any)

//傳位址

bind

(cfd,

(struct sockaddr*

)&serv,

sizeof

(serv)

);

3、listen函式的用法

int

listen

(int sockfd,

int backlog)

;//backlog:可以排隊的最大連線數

4、accept函式的用法

int

accept

(int sockfd,

struct sockaddr* addr, socklen_t *addrlen)

;//返回乙個全新的套接字,該套接字用來通訊,傳送接收資料

//addr用來返回客戶端的連線位址,為傳出引數

//addrlen返回協議位址的長度,為傳出引數

5、read、write函式

ssize_t read

(int fd,

void

*buf, size_t count)

;ssize_t write

(int fd,

const

void

*buf, size_t count)

;//返回值:實際寫入、讀出的位元組數(read函式返回0時表示讀到末尾,返回負數為出錯;write函式返回負數時表示出錯)

//buf:寫入、讀出的緩衝區

//count:期望寫入、讀出的位元組數

6、close函式

int

close

(int fd)

;

7、connect函式的用法:

int

connect

(int sockfd,

const

struct sockaddr* addr, socklen_t addrlen)

;//addr用來傳入目標伺服器的位址資訊

//addrlen為目標伺服器位址資訊的長度

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

linux網路程式設計之Socket

一.socket socket可看作是使用者程序與核心網路協議的程式設計介面.socket可用於本機程序間的通訊,也可用於網路上不同主機間的程序通訊.下圖顯示的是各種網路協議的位址格式 1.struct socketaddr 通用位址結構 通過獲取某種socketaddr結構體的首位址,不需要知道具...