chapter04 基本TCP套接字程式設計

2021-10-04 01:52:27 字數 2913 閱讀 5774

chapter_04 傳輸層:基本tcp套接字程式設計

相對於書而言,內容沒有什麼價值。書上的內容全面可靠。

必要的內容放在正文中。相對而言非主線的內容放在附錄中。這兩個集合之外的內容,可能沒有寫出,或者隨它而去。

為了好看增加顏色標識。提問內容顏色標識:綠色; 重點程度顏色標識:紅色》藍色》黑體。

(csdn自身的顏色不在考慮範圍內。)

二、**

本章講解編寫乙個完整的tcp客戶/伺服器程式所需要的基本套接字函式。

整體的**,見**部分。

函式原型:int socket(int family, int type, int protocol);

eg:int sockfd = socket(af_inet, sock_stream, 0)

函式作用:指定期望的通訊協議型別

引數解析:

參數列:

其中標為「是」的項也是有效的, 但還沒有找到便捷的縮略詞。 而空白項則是無效組合。

返回值:

socket函式在成功時返回乙個小的非負整數值, 它與檔案描述符類似, 我們把它稱為套接字描述符(socket descriptor) , 簡稱sockfd。

函式原型:int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

eg:connect(sockfd, (sa *) &servaddr, sizeof(servaddr))

函式作用:tcp客戶用connect函式來建立與tcp伺服器的連線。

引數解析:

函式返回:若成功則為0, 若出錯則為-1

出錯原因:

函式原型:int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

eg:bind(listenfd, (sa *) &servaddr, sizeof(servaddr));

函式作用解析:

函式引數:

函式返回:若成功則為0, 若出錯則為-1

函式原型:int listen(int sockfd, int backlog);

eg:listen(listenfd, listenq);

函式作用: listen函式把乙個未連線的套接字轉換成乙個被動套接字, 指示核心應接受指向該套接字的連線請求。

函式引數:

函式返回:若成功則為0, 若出錯則為-1

函式原型:int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);

eg:connfd = accept(listenfd, (sa *) null, null);

函式引數:

函式返回:若成功則為非負描述符我們稱它為已連線套接字(connected socket) 描述符。 若出錯則為-1

函式原型:pid_t fork(void);

函式作用:該函式是unix中派生新程序的方法。

函式返回:在子程序中為0, 在父程序中為子程序id, 若出錯則為-1

fork有兩個典型用法:

函式原型:int close(int sockfd);

函式功能:關閉套接字, 並終止tcp連線

函式返回:若成功則為0, 若出錯則為-1

getsockname函式原型:int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);

函式引數:同上

注:在這樣的呼叫中, 套接字描述符引數必須是已連線套接字的描述符, 而不是監聽套接字的描述符

函式返回:若成功則為0, 若出錯則為-1

getpeername函式原型:int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);

函式引數:同上

注:該函式應該適合任何已開啟的套接字描述符。

函式返回:若成功則為0, 若出錯則為-1

在源**的基礎上進行修改。也是課後習題4.2的**。

#include

"unp.h"

intmain

(int argc,

char

**ar**)

//最多可以讀取(maxline + 1)字元。不夠,提前終止;

//返回讀取的字元數;

//因為已知,時間的字串長度不長,足以存下。所以可以用readn

//在未知長度的時候,用上面的寫法。

n=readn

(sockfd,

(sa *

) recvline, maxline +1)

;printf

("%s"

,recvline);if

(n <0)

err_sys

("read error");

exit(0);}

#include

"unp.h"

#include

intmain

(int argc,

char

**ar**)

}

Chapter04 開放 封閉原則

開放 封閉原則,是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。這個原則其實是有兩個特徵,乙個是說,對於擴充套件是開放的 open for extension 另乙個是說 對於更改是封閉的 closed for modification 開放封閉原則可以使當需求改變時,可以保持程式...

人工智慧 chapter04 決策樹

也可用於分類 二 原理 找到符合某個條件來進行分類 就是乙個x furuter 鳶尾花中petal length和petal width兩個x,可以橫著一次 豎著一次 防止過擬合 優缺點 實現功能 1.訓練模型 2.param train sample 包含多條訓練樣本的樣本集,型別為ndarray...

Chapter 04 陣列和指標並不相同

陣列和指標是相同的 是一種非常危險 並不完全正確的說法。ansi標準 extern int x x是個int型的指標 extern int y y是個int型陣列,長度尚未確定 陣列定義不等同於指標的外部宣告的情況 檔案1 定義了乙個int陣列 int mango 100 檔案2 外部宣告的指向in...