1. 程式人生 > >VC++使用socket進行TCP、UDP通信實例總結

VC++使用socket進行TCP、UDP通信實例總結

數據包 面向 類型 cep ip地址 定義 protocol htm blog

1. 兩臺計算機通信需要協議,通信的兩臺計算機IP必須唯一

2. 同一個計算機可以進行多個應用程序與其他計算機通信,IP地址唯一,而端口號是區別同一計算機(同一IP)的唯一標示。

3. 實際上就類似於一個辦公室的總機號碼(IP)和分機號碼(端口號)

4. 協議:為了進行網絡中的數據交換(通信)而建立的規則、標準或約定

5. 協議=語義+語法+規則

6. 不同層具有各自不同的協議

7. 上層使用下層提供的服務,實際通信在最底層完成

8. 對等層實體之間虛擬通信|

9. TCP:面向連接的可靠的傳輸協議

10. UDP:面向無連接的不可靠的傳輸協議

11. 端口是一種抽象的軟件結構。應用程序通過系統調用與某端口建立連接後,傳輸層傳給端口的數據都被響應的進行所接收,相應進程發給傳輸層的數據都通過該端口輸出。

12. 端口用一個整數型標示符來表示。端口號跟協議相關,TCP/IP傳輸層的兩個協議TCP和UDP是完全獨立的兩個軟件模塊,因此各自的端口號也相互獨立。

13. 端口使用一個16位的數字來表示,它的範圍是0~65535,1024以下的端口號保留給預定義的服務。例如:http使用的是80端口。

14. socket(套接字):windows sockets只支持一個通信區域:網際域(AF_INET),這個域被使用網際協議簇通信的進程使用。

15. C/S模式:客戶機向服務器提出請求,服務器接收到請求後,提供相應的服務。

16. 套接字的類型

  a) 流式套接字:(SOCK_STREAM):面向連接可靠的數據傳輸服務,按順序接收

  b) 數據包式套接字:(SOCK_DGRAM):無連接服務。接收順序混亂。

  c) 原始套接字(SOCK_RAM)

17. 基於TCP(面向連接)的socket編程

a) 服務器端程序:

i. 創建套接字socket

ii. 將套接字綁定到一個本地地址和端口上bind

iii. 將套接字設為監聽模式,準備接收客戶請求listen

iv. 等待客戶請求到了;當請求到來後,接收連接請求,返回一個新的對應於此次連接的套接字accept

v. 用返回的套接字和客戶端進行通信send/recv

vi. 返回,等待另一客戶請求

vii. 關閉套接字

b) 客戶端程序:

i. 創建套接字socket

ii. 向服務端發出連接請求connect

iii. 和服務器端進行通信rend/recv

iv. 關閉套接字

18. 基於UDP的socket編程

a) 服務器端(接收端)程序:

i. 創建套接字socket

ii. 將套接字綁定到一個本地地址和端口上bind

iii. 等待接收數據recv/from

iv. 關閉套接字

b) 客戶端(發送端)程序:

i. 創建套接字socket

ii. 向服務器發送數據sendto

iii. 關閉套接字

19.int WSAStartup (

  WORD wVersionRequested, //打算使用的最高winsock版本號 
  LPWSADATA lpWSAData  //是個結構體,接收socket的詳細信息

);

20. alt+F8:格式化代碼

21. 面向TCP的連接,服務器端

  a) 套接字

SOCKET socket (
  int af,       //指定地址簇
  int type,     //socket類型
  int protocol  //協議

);

  b) 綁定

int bind (
  SOCKET s,                          //要綁定的套接字
  const struct sockaddr FAR*  name,  //指定了該套接字的本地地址信息
  int namelen                        //該地址結構的長度
);

struct sockaddr {

u_short sa_family;

char sa_data[14];

};

  c) 監聽

int listen (
  SOCKET s,    
  int backlog  
);

  d) 接受連接

SOCKET accept (
  SOCKET s,                   
  struct sockaddr FAR* addr,  
  int FAR* addrlen            
);
 e)  發送
int send (
  SOCKET s,              //建立連接的socket
  const char FAR * buf,  //發送的數據
  int len,               //發送數據的長度
  int flags              
);
  f)  接收
int recv (
  SOCKET s,       
  char FAR* buf,  
  int len,        
  int flags       
);
  g)  需要的文件
#include <winsock2.h>
需要連接一個動態鏈接庫:ws2_32.lib

  22. 服務器端:

  a) Socket

  b) 連接:connect

 int connect (
  SOCKET s,                          
  const struct sockaddr FAR*  name,  
  int namelen                        
);

  c) 接收:recv

  d) 發送:send

  e) 關閉:closesocket

參考文獻:

1、VC++ socket通信實例 總結

2、VC++ 使用socket基於TCP、UDP通信

VC++使用socket進行TCP、UDP通信實例總結