Linux 網路程式設計 基本伺服器 客戶端

2021-07-10 08:24:58 字數 1002 閱讀 1787

前言

我們開始學習網路程式設計,儘管接下來的速度會非常快,但是我還是希望事事具細。

首先我們以乙個回射伺服器來說說流程。

變數部分:

listenfd 監聽字

connfd 鏈結字

childpid  伺服器程序id

cliaddr  客戶端套接字結構體    servaddr 服務端套接字結構體

函式部分:

socket 函式建立乙個套接字 ,接收協議型別,返回乙個套接字描述符這裡是乙個通配位址。

接著開始指定伺服器套接字結構體的基本資訊,協議,ip, 埠等。

bind 函式將伺服器資訊與套接字描述符繫結。

listen 函式開始監聽這個伺服器套接字,三次握手就再這裡。

我們對與每乙個鏈結都給他開乙個程序處理資訊。

accept 函式用來完成三路握手完成鏈結,獲取客戶端資訊,然後返回這個全雙工的資訊鏈結字。

它接收資訊並且回射。

這個客戶端的功能是,從命令列接收一行字元傳送給伺服器,然後伺服器回射給他。

建立乙個tcp套接字,然後從命令列獲取ip ,並且我們指定乙個眾所周知的埠,然後鏈結伺服器。

正常終止:

首先客戶端關閉套接字,向伺服器傳送乙個fin,伺服器傳送乙個ack 來回應。這是tcp鏈結終止的前半部分。

伺服器套接字  close_wait

客戶套接字   fin_wait_2

接著伺服器程序開始結束

伺服器向客戶端傳送fin

客戶端回乙個ack

鏈結結束。

當伺服器主機崩潰

首先tcp會一直嘗試重新傳送資料,當超過一定時間後,自動判定伺服器崩潰結束

其次,如果是因為網路問題導致訊息不可達,客戶端收到不可達資訊後自己關閉

我們可以通過超時,保活,心跳等手段來改善這個現象

當伺服器主機崩潰後重啟

當伺服器崩潰時,客戶端只要不主動傳送資料它是不知道伺服器崩潰的,當伺服器再次重啟時,之前的鏈結資訊已經全部丟失,鏈結直接失效。

Linux網路程式設計 伺服器端基本框架

伺服器 話機 socket 繫結 bind 多路 listen 等待 accept 接通 新socket 總機等別的 分機跟客戶通訊 通訊 write read 結束通話分機 close include include include include include include include ...

Linux網路程式設計 伺服器模型

學習過 軟體工程 吧.軟體工程可是每乙個程式 員 必修 的課程啊.如果你沒有學習過,建議你去看一看.在這一章裡面,我們一起來從軟體工程的角度學習網路程式設計的思想.在我們寫程式之前,我們都 應該從軟體工程的角度規劃好我們的軟體,這樣我們開發軟體的效率才會高.在網路程式裡面,一般的來說都是許多客戶機對...

Linux網路程式設計 伺服器模型

在網路程式裡面,一般的來說都是許多客戶機對應乙個伺服器.為了處理客戶機的請求,對服務端的程式就提出了特殊的要求.我們學習一下目前最常用的伺服器模型.迴圈伺服器 迴圈伺服器在同乙個時刻只可以響應乙個客戶端的請求 併發伺服器 併發伺服器在同乙個時刻可以響應多個客戶端的請求 9.1 迴圈伺服器 udp伺服...