UNIX網路程式設計卷1 第1章 簡介

2021-09-22 16:48:39 字數 1454 閱讀 4928

要編寫通過計算機網路通訊的程式,首先要確定這些程式相互通訊所用的協議。

一般認為web伺服器程式是乙個長時間執行的程式(守護程式,daemon)它只在響應來自網路的請求時才傳送網路訊息。協議的另一端是web客戶程式,如某種瀏覽器,與伺服器程序的通訊總是由客戶程序發起。

在設計網路應用時,確定總是由客戶發起請求往往能夠簡化協議和程式本身。

下例是tcp當前時間查詢客戶程式的乙個實現。該客戶與其伺服器建立乙個tcp連線後,伺服器以直觀可讀格式簡單地送回當前時間和日期:

#include

"unp.h"

intmain

(int argc,

char

* ar**)

if(n<0)

err_sys

("read error");

exit(0

);}

gcc daytimetcpcli.c -o daytimetcpcli -lunp
編寫乙個簡單的tcp時間獲取伺服器程式,與前文的客戶程式一道工作:

#include

"unp.h"

#include

intmain

(int argc,

char

* ar**)

}

程式說明

建立tcp套接字

11 tcp套接字的建立與客戶程式相同

**埠到套接字

12-17 填寫乙個網際套接字位址結構,呼叫bind函式,埠13被**到所建立的套接字。指定ip位址為inaddr_any,如果伺服器主機有多個網路介面,伺服器程序就可以在任意網路介面上接受客戶連線。

把套接字轉換成監聽套接字

18 呼叫listen函式將套接字轉換為監聽套接字。socketbindlisten這3個呼叫步驟是任何tcp伺服器準備所謂的監聽描述符(listenfd)的正常步驟。

接受客戶連線,傳送應答

20-25 通常情況下,伺服器程序在accept呼叫中被投入睡眠,等待某個客戶連線的到達並被核心接受。經過tcp三次握手後,accept返回,其返回值是乙個稱為已連線描述符的新描述符(connfd)。該描述符用於與新近連線的那個客戶通訊。accept為每個連線到本伺服器的客戶返回乙個新描述符。

終止連線

26 伺服器通過呼叫close關閉與客戶的連線。該呼叫引發正常的tcp連線終止序列。

本伺服器程式一次只能處理乙個客戶,如果多個客戶連線差不多同時到達,系統核心在某個最大數目的限制下把它們排入佇列,然後每次返回乙個給accept函式。

Unix 網路程式設計卷1

伺服器被動開啟 passive open socket bind listen。客戶端通過socket connect主動開啟 active open accept和connect是阻塞的 把目標位元組串指定數目的位元組置為c void memset void dest,int c,size t l...

unix網路程式設計第2版 卷1 第6章 同步

6.1概述 在5.12節中,我們看到tcp客戶同時處理兩個輸入 標準輸入和tcp套介面。我們遇到的問題是客戶阻塞於 標準輸入上的 fgets呼叫,而伺服器程序又被殺死。伺服器tcp雖正確地給客戶tcp發了乙個fin,但客戶程序正阻塞於從標準輸入讀入,它直到從套介面讀時才能看到此檔案結束符 可能已經過...

第1章 簡介

桉樹企業版 ee 2.0是乙個基於linux體系架構,對企業資源 硬體 儲存 網路 統一管理的雲平台。桉樹雲是iaas層面的雲平台,對基礎裝置進行管理和擴充套件,為企業提供私有雲 可以部署在企業的防火牆之內,僅供企業內部使用,確保資料的安全性 和混合雲部署方案。桉樹在設計之初就考慮了易用性 模組化和...