網路程式設計套接字

2021-08-20 14:40:26 字數 2919 閱讀 6495

本節重點

本節重點需要掌握的是:

基本概念

1. 認識ip位址

同樣的問題,整個西天取經過程中,直到ip位址(從長安到西天),只知道這個不能完成取經;需要直到從長安的誰那得到的資訊到西天的誰那拿經(唐太宗——>如來佛);有了ip位址(長安 西天)和埠號(唐太宗 如來佛)才能完成取經。——>引出了下面的埠號的概念。

2.. 認識埠號

下面對埠號做以解釋:

埠號:2位元組16位的整數;

埠號用來標識程序的,告訴作業系統,當前的這個資料要交給哪乙個程序來處理

ip位址+埠號(套接字) 能夠標識網路上的某一台主機的某乙個程序

乙個埠號只能乙個程序占用(唯一性)

埠號port和程序id的區別:
都是標識程序的,pid是表示唯一程序的,埠號也是唯一表示乙個程序的

程序id: 所有的程序都有id

埠號:只有網路通訊時,程序才會有埠號

另外:

乙個程序不可以繫結多個埠號(只是可以繫結任意的埠號,除了知名埠號(0-1023)外),

而乙個埠號能被多個程序繫結(比如tcp程式的多程序版本和多執行緒版本)

其中源埠號和目的埠號就是上面例子中的唐太宗和如來佛

3. tcp協議和udp協議的區別:

特點:

傳輸層協議

有連線可靠傳輸

面向位元組流

特點:

傳輸層協議

無連線不可靠傳輸(高效傳輸)

面向資料報

下面是我的另外一篇文章tcp協議和udp協議的區別:

文章中詳細的解釋了每乙個特點。

4. 網路位元組序

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放的內容

0x12

0x34

0x56

0x78

5. 小端模式:用高位址存放資料高位,用低位址存放資料低位

eg: 32位的數0x12345678在cpu記憶體中存放的方式(假設0x4000表示低位址):

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放的內容

0x78

0x56

0x34

0x12

為了網路程式具有可移植性,使用同樣的c**在大端和小端的計算機上編譯後能正常執行,可以呼叫以下的庫函式,用作網路位元組序和主機位元組序的轉換。

#include 

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

1. htonl

h表示host(主機),n表示network(網路),l表示long(32為長整數)

其他的函式類似,s表示short(16位短整數)

2. htons

表示:將short(16位短整數)從主機位元組序轉為網路位元組序

eg:將ip位址轉換後準備傳送

3. 主機大端:函式不做轉換,將引數原封不動返回

主機小端:函式做大小端的相應轉換,然後返回

scoket程式設計介面

scoket常見api

linux下:一切皆檔案

其中下面()中的內容,就是此函式會在什麼中用到

eg:(tcp/udp,客戶端+伺服器) 表示:tcp/udp網路程式中的客戶端和伺服器都會用到

而繫結埠號(tcp/udp,伺服器) 表示:tcp/udp中的伺服器會用到,而這裡其實客戶端也可以用到,只是不建議用

//1. 建立 socket(套接字) 檔案描述符 (tcp/udp,客戶端+伺服器)

intsocket(int domain , int type , int protocol);

//2. 繫結埠號 (tcp/udp,伺服器)

intbind(int

socket, const struct sockaddr *address, socklen_t address_len);

/*因為:伺服器端:埠號不能變,必須繫結(眾所眾知)

客戶端:埠號可以改變,建議不繫結。(以後不說明的情況下,都是不繫結)*/

//3. 開始監聽socket (tcp,伺服器)

intlisten(int

socket,int backlog);

//4. 接受請求 (tcp,伺服器)

intaccept(int

socket, struct sockaddr* address,socklen_t* address_len);

//5. 建立連線 (tcp,客戶端)

intconnect(int sockfd, const struct sockaddr *addr, socklen_t addlen);

簡單的udp網路程式

簡單的udp網路程式

下面是我的另外一篇部落格,有詳細的解釋:

簡單的tcp網路程式

簡單的tcp網路程式

下面是我的另外一篇部落格,有詳細的解釋:

網路套接字程式設計

1。位元組序 小位元組 低位儲存在低位元組 大位元組 低位儲存在高位元組 簡單程式判斷 int islittle 2.hostent結構 struct hostent define h addr h addr list 0 這裡是這個資料結構的詳細資料 struct hostent h name 位...

網路程式設計套接字

建立 函式原型 int socket int domain int type int protocol 引數說明 domain 協議域,又稱協議族 family 常用的協議族有af inet af inet6 af local 或稱af unix,unix域socket af route等。協議族決...

網路套接字程式設計

目錄 1.基本概念 1.1 ip位址 1.2 port埠號 1.3 五元組 1.4 位元組序 2.套接字程式設計 2.1 概念 2.2 基於udp協議實現網路通訊 2.2.1 客戶端 2.3 基於tcp協議實現網路通訊 ipv6 16個位元組 由於不向下相容ipv4,因此不被廣泛使用。資料型別 無符...