UNIX網路程式設計3 基本TCP套接字程式設計

2021-08-03 00:15:59 字數 2560 閱讀 7691

#include int socket(int family, int type, int protocal);//若成功則返回非負描述符,若失敗則返回-1
socket函式成功時返回的為套接字描述符(socket descriptor,簡稱sockfd)

socket函式的family常值:

socket函式的type常值:

socket函式的protocol常值:

family和type的有效組合(標記為是的也是有效組合,但沒有找到合適的縮略詞)

tcp客戶用connect函式來建立與tcp伺服器的連線,如果是tcp套接字,呼叫connect函式將引發三次握手過程,並且僅在連線成功或者出錯時才返回。

#include int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
bind函式把乙個本地協議位址賦予乙個套接字,對於網際網協議,協議位址是32位的ipv4位址或128位的ipv6位址與16位的tcp或udp埠號的組合。呼叫bind函式可以指定ip位址或者埠號,可以兩者都指定,也可兩者都不指定。

#include int bind(int sockfd, const struct sockaddr * servaddr, socklen_t addrlen); //成功則返回0,出錯則返回-1
5. listen函式

僅由tcp伺服器呼叫,將乙個未連線的套接字轉換成乙個被動套接字,指示核心應接受指向該套接字的連線請求。

#include //backlog規定應為相應套接字排隊的最大連線個數

int listen(int sockfd, int backlog);//若成功則返回0,出錯則返回-1

核心為任何乙個監聽套接字維護兩個佇列:未完成連線佇列(還沒有完成三次握手)和已完成連線佇列。兩佇列之和不超過backlog

6. accept函式

由tcp伺服器呼叫,用於從已完成連線佇列隊頭返回乙個已完成連線,如果已完成連線為空,那麼程序被投入睡眠。

#include//sockfd為監聽套接字描述符,若accept成功,返回的是已連線套接字描述符

//cliaddr和addrlen用來返回已連線的對端程序(客戶)的協議位址及該位址的長度,如果對返回客戶位址不感興趣,可以將這兩個指標置為空指標

int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);//若成功則返回非負描述符(已連線套接字描述符),若失敗則返回-1

7. fork和exec函式

fork函式是unix派生新程序的唯一方法。

#include pid_t fork(void); //呼叫fork函式一次,返回兩次,在父程序中返回新派生程序的程序id,在子程序中返回0。若出錯返回-1。
父程序和子程序:

fork函式的兩種用法:

exec函式:有6個

8. close函式

close函式用來關閉套接字,並終止tcp連線

#include int close(int sockfd);//若成功則返回0,出錯則返回-1
9. getsockname和getpeername函式

返回與某個套接字關聯的本地協議位址、外地協議位址。

#include //成功則返回0,出錯則返回-1

int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t * addrlen);

int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t * addrlen);

UNIX網路程式設計 基本TCP套接字程式設計

一 基於tcp協議的網路程式 下圖是基於tcp協議的客戶端 伺服器程式的一般流程 伺服器呼叫socket bind listen 完成初始化後,呼叫accept 阻塞等待,處於監聽埠的狀態,客戶端呼叫socket 初始化後,呼叫connect 發出syn段並阻塞等待伺服器應答,伺服器應答乙個syn ...

UNIX網路程式設計卷一 3 套接字程式設計簡介

1 套接字位址結構 ipv4套接字位址結構 struct in addr struct sockaddr in 2 通用套接字位址結構 struct sockaddr 3 值 結果引數 4 位元組序排序函式 另一種方法是將高序位元組儲存在起始位址,這稱為大端位元組序。include uint32 t...

基本TCP套介面的程式設計流程

要實現客戶端和伺服器端的通訊,則需要客戶端和伺服器端共同完成。其中,tcp伺服器和客戶端的程式設計流程如圖所示 首先由伺服器端建立socket,然後bind繫結通訊埠,建立listen監聽佇列。之後便開始了通訊的過程。此時伺服器阻塞在accept這裡,直到tcp客戶端主動進行connect進行三次握...