寫聊天室之前 瞭解聊天室拓展出來的各種知識點

TCP:併發服務器 效率最高 多線程

UDP:循環服務器 不需要listen accept connect

Select(多路複用): 循環服務器

 

網絡編程注意點:

TCP/IP 四層模型 { 應用層,傳輸層,網絡層,網絡接口層 }

背三次握手四次揮手

DHCP協議是什麼?

 

套接字 有三種:

  1. TCP 流套接字 sock_stream
  2. UDP 數據報套接字 sock_dgram
  3. 原始套接字

 

服務器有什麼?

  1. IP 用以在局域網中 找到你的電腦(你就理解成定位系統)
  2. 端口號 找到對應的軟件(比如是發消息給你的電腦 哪個程序來接受消息?

QQ/微信/SKAPE)

 

Bind / accept 等的第二個參數 需要加強制轉換類型

第二個參數 的結構原型:

Struct sockaddr

{

U_short sa_family; //地址族協議

Char sa_data[14]; //存放ip 與 端口號

};

 

有關端口號: 1-65535 (x shell 中 connecting to 192.168.128.91  :  22這裏的22就是端口號)

1-1023 一般不用 被各種協議 佔用了

(1)知名端口(Well-Known Ports)

知名端口即衆所周知的端口號,範圍從0到1023,這些端口號一般固定分配給一些服務。比如21端口分配給FTP服務,25端口分配給SMTP(簡單郵件傳輸協議)服務,80端口分配給HTTP服務,135端口分配給RPC(遠程過程調用)服務等等。

(2)動態端口(Dynamic Ports)

動態端口的範圍從1024到65535,這些端口號一般不固定分配給某個服務,也就是說許多服務都可以使用這些端口。只要運行的程序向系統提出訪問網絡的申請,那麼系統就可以從這些端口號中分配一個供該程序使用。比如1024端口就是分配給第一個向系統發出申請的程序。在關閉程序進程後,就會釋放所佔用的端口號。

 

然後 這個結構慢慢演變了

Struct sockadddr_in

{

Short int sin_family; //internet 地址族

Unsigned short sin_port; //端口號 (自己要指定)

Struct in_addr sin_addr; //IP地址

Unsigned char sin_zero[8]; //填0

};

 

這裏就又涉及到一個知識點:大小端的轉換

內存中分爲 高地址 和 低地址

而數據又有 高字節 和 低字節

大端:高字節存放在低地址中

小端:低字節存放在低地址中

一般

小端:主機的字節序

大端:網絡的字節序

(遇到相關問題和題目 注意平臺與電腦鍵的轉換)

 

有關大小端的轉換:

Int  a  =  1;

A & 0x000000ff << 24  |

A & 0x0000ff00 << 8   |

A & 0x00ff0000 >> 8   |

A & 0xff000000 >>24

將A的左右移位完成大小端的轉化

 

Htonl:(在#include <arpa/inet.h> 頭文件中)

H:host 主機

To:

N:網絡

L:兩個字節 32位

S:一個字節 16位

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章