程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Socket的地址結構

Socket的地址結構

編輯:關於C++

在建立socket通信的過程中地址起著很關鍵的作用,在設計TCP/IP網絡程序時,必須對 socket 的地址結構有清晰的認識。

TCP/IP 的地址數據結構。

struct sockaddr {
u_short safamily;/*地址族,AF_XXX*/
char sa_data[14];/*14字節的特定協議地址*/
}

其中14字節的sa_data隨協議而不同。在TCP/IP協議族中,地址數據結構為:

struct in_addr{
u_long s_addr;/*32比特的IP地址,網絡字節順序 */
};
struct sockaddr_in{
short sin_family; /*AF_INET*/
u_short sin_short; /*16比特的端口號,網絡字節順序*/
struct in_addr sin_addr; /*32比特的IP地址,網絡字節順序*/
char sin_zero[8]; /*未用*/
}

網絡字節順序是TCP/IP中規定好的一種數據表示格式,它與具體的CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。由主機字節順序轉換為網絡字節順序的兩個函數如下:htons():將16比特的主機字節順序數據轉換為網絡字節順序htonl():將32比特的主機字節順序數據轉換為網絡字節順序與此相對應的將網絡字節順序轉換為主機字節順序的函數為:

ntohs():將16比特的網絡字節順序數據轉換為主機字節順序ntohl():將32比特的網絡字節順序數據轉換為主機字節順序由於各種socket地址結構的長度相差很大,TCP/IP地址族的地址長度為8字節,XNS地址為14字節,UNIX地址不定,最長可達110字節,所以無法以一種統一的格式定義它們,需要在bind()調用中明確指定socket地址的長度。

當bind()參數無效或端口已被其他程序所用時,函數返回-1,表明本次socket命名失敗。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved