網路程式設計四

2021-05-25 00:43:52 字數 1361 閱讀 4420

5.listen函式

兩個作用:

一.客戶端中呼叫listen函式,將未連線的套介面轉換為被動套介面,什麼是未連線套介面=呼叫connect函式外的套介面;

實現tcp狀態轉換 close-->listen;

二.指定核心為此套介面排隊的最大連線數

核心維護兩個佇列:未完成佇列,以完成佇列

未完成佇列是為完成三路握手的分節,

以完成佇列是完成三路握手的分節所在的佇列,核心要把已完成的分節通過accept函式給伺服器程序;圖4.6 4.7;如果已完成佇列是空,則accept函式睡眠(accept阻塞模式);

listen的包裹函式;主要是通過getenv獲得 listen的第二個引數,以實現可配置

6.accept函式

accept函式返回客戶端得套接字,及其位址結構;這樣我們向客戶端傳送訊息的時候,可以用write(客戶端套接字,..);將要傳送的內容傳送過去;

服務端程式中兩個套接字的生命週期:

監聽套接字,以連線套接字

監聽套接字由服務端sock函式,生成,生命週期是整個程式;

以連線套接字由服務端accept函式返回,生命週期只是乙個for中的任務,任務結束後close

例:輸出客戶端ip和埠號的伺服器

注意:

呼叫13埠必須有超級使用者的許可權,不然會bind失敗;

接收客戶端協議位址後,對其ip,和埠號,要經過,inet_ntop,ntohs,轉換為本機位元組序;

7.fork,exec

fork函式派生子程序,子程序繼承父程序的資源;fork函式呼叫一次返回兩次,返回值為0代表是子程序本身,-1為呼叫出錯,否則為在父程序中呼叫,返回的是子程序id

exec應用:先呼叫fork,在子程序中執行exec;

exec六個函式;

8.併發伺服器

tcp套介面呼叫close會引發fin,終結連線,這是訪問計數為1的時候;

每個檔案或者套介面都有乙個訪問計數,表示開啟檔案或者套介面的個數,close一次就-1,當計數為0的時候,才關閉連線

9.close函式

關閉描述字,將計數-1

10.getsockname,getpeername

getsockname

可以獲得核心分配到本地的ip和埠號,位址族;

為什麼是已連線套接字,不是監聽套接字

getpeername

用於程序exec啟動新程式的時候,因為exec生成的新程式,丟失了前程序的套介面位址結構,但是套介面描述字仍然繼承,新程式就可以通過getpeername獲得客戶的ip和埠號;

套介面描述字可以當做命令列引數傳給新程式,還有乙個方法不懂。。

例:獲取套介面中的位址族

需要乙個union(也可以不用)

網路程式設計(四)

1.掌握併發伺服器 多路復用是假的併發 本質上是序列處理 多程序或多執行緒實現才叫併發 伺服器建立子程序去處理使用者業務 併發伺服器 適用於使用者請求需要長時間解決完的情境 注意 子程序只處理使用者業務,所以關閉監聽套接字 父程序只接受新的連線,所以關閉鏈結套接字 父程序還要 子程序屍體 伺服器建立...

Python的網路程式設計 四

urllib和urllib2 開啟遠端檔案的操作和本地差不多,不同的是只能使用讀模式,並且使用urllib模組的urlopen 的檔案類物件。注意 如果你當前沒有聯網,而你又想練習一下urllib的話,你可以用如下形式訪問本地檔案 localpage urlopen r file c test.tx...

(TCP IP網路程式設計)實驗四 程序程式設計

1 在理解程序的概念及其生命週期和狀態轉換過程的基礎上,進行程序相關程式設計 2 在理解程序間通訊的基本原理的基礎上,程式設計實現程序間通訊。1 在linux中利用fork 在父程序a中建立乙個子程序b,再在子程序a中建立乙個子程序c,在3個程序中都要編寫適當的語句模擬程序的工作。2 建立子程序時將...