socket網路程式設計一些知識點

2021-08-09 04:13:24 字數 1779 閱讀 3562

一、socket用於不同計算機間的程序間通訊

tcp/ip協議族中網路層的ip位址可以唯一標識網路中的主機,而傳輸層的埠可以唯一標識主機中的應用程式。socket通常也稱作"套接字",用於描述ip位址和埠,是乙個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在internet上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個socket,並繫結到乙個埠上,不同的埠對應於不同的服務。socket所支援的協議種類不止tcp/ip,因此兩者之間是沒有必然聯絡的。

二、socket的一些概念

要賦予socket位址,就得使用乙個資料結構來指明特定的socket位址,這個資料結構就是struct sockaddr。對它的使用我就不說了,因為這篇文件的目的是澄清概念而不是說明使用方法。bind函式的作用就是將這個特定的標註有socket位址資訊的資料結構和socket套接字聯絡起來,即賦予這個套接字乙個位址。但是在具體實現上,他們兩個是怎

麼聯絡在一起的,我還不知道。 

乙個特定的socket的位址的生命期是bind成功以後到連線斷開前。你可以建立乙個socket資料結構和socket位址的資料結構,但是在沒有bind以前他們兩個是沒有關係

的,在bind以後他們兩個才有了關係。這種關係一直維持到連線的結束,當乙個連線結束時,socket資料結構和socket位址的資料結構還都存在,但是他們兩個已經沒有關係

了。如果你要是用這個套接字在socket位址上重新進行連線時,需重新bind他們兩個。再註明一次,我說的這個連線是乙個連線通道,而不是特定的主機之間的連線。 

bind指定的ip通常是本地ip(一般不特別指定,而使用inaddr_any來宣告),而最主要的作用是指定埠。在伺服器端的socket進行了bind以後就是用listen來在這個socket

位址上準備進行連線。 

connect: 

對於客戶端來說,是不會使用bind的(並不是不能用,但沒什麼意義),他們會通過connet函式來建立socket和socket位址之間的關係。其中的socket位址是它想要連線的

伺服器端的socket位址。在connect建立socket和socket位址兩者關係的同時,它也在嘗試著建立遠端的連線。 

3. 建立socket連線。 

對於準備建立乙個連線,伺服器端要兩個步驟:bind, listen;客戶端乙個步驟:

connct。如果伺服器端accept乙個connect,而客戶端得到了這個accept的確認,那麼

乙個連線就建立了。

四、客戶/伺服器模式採取的是主動請求方式:

首先伺服器方要先啟動,並根據請求提供相應服務:

1. 開啟一通訊通道並告知本地主機,它願意在某一公認位址上(周知口,如ftp為21)接收客戶請求;

2. 等待客戶請求到達該埠;

3. 接收到重複服務請求,處理該請求並傳送應答訊號。接收到併發服務請求,要啟用一新程序來處理這個客戶請求(如unix系統中用fork、exec)。新程序處理此客戶請求,並不需要對其它請求作出應答。服務完成後,關閉此新程序與客戶的通訊鏈路,並終止。

4. 返回第二步,等待另一客戶請求。

5. 關閉伺服器

客戶方:

1. 開啟一通訊通道,並連線到伺服器所在主機的特定埠;

2. 向伺服器發服務請求報文,等待並接收應答;繼續提出請求......

3. 請求結束後關閉通訊通道並終止。

從上面所描述過程可知:

1. 客戶與伺服器程序的作用是非對稱的,因此編碼不同。

2. 服務程序一般是先湧紀紀戶請求而啟動的。只要系統執行,該服務程序一直存在,直到正常或強迫終止。

reference:

一些知識點

字串拼接 1.a join b a為元素之間的分隔符,b為待分割的序列 可用於輸出時的資料處理,元素間有空格,末尾沒有 2 s s s str1,str2,str3 前半部分為字串,後半部分為索引。用於引入,s是物件 3.format str1,str2,str3 與f 括號裡為已有變數 關於for...

一些知識點

1.vector是在堆上還是棧上?在堆上.2.我們發現指標有一些 似是而非 的特徵 1 指標消亡了,並不表示它所指的記憶體會被自動釋放。比如函式中的指標是區域性變數,如果它指向了堆上,而自己出了函式後消亡了,但它所指向的記憶體還是存在的,導致了記憶體洩漏.2 記憶體被釋放了,並不表示指標會消亡或者成...

一些知識點

1 sln 解決方案檔案 csproj 專案檔案 cs 原始檔 解決方案包含多個專案,每個專案都是乙個程式。config 配置檔案 3 const int a 1 const 定義乙個量為常量,運算中用到當常量使用,不可以再重新賦值。4 型別轉換。1 隱式轉換。從值型別轉換成引用型別。從引用型別轉換...