struct sockaddr_in
該結構體中的in_addr定義如下
struct in_addr
上面的in_addr_t為uint32_t型別,即unsigned 32-bit int(unsigned long),定義在標頭檔案sys/types.h中
in_port_t為uint16_t型別,即unsigned 32-bit int(unsigned short),定義在標頭檔案sys/types.h中
sin_family:每種協議族適用的位址族不同,比如ipv4使用4位元組位址族,ipv6使用16位元組位址族
af_inet6 ipv6網路協議中使用的位址族
af_local unix協議本地通訊中使用的位址族
sin_port:以網路位元組序儲存16位埠號
sin_addr:以網路位元組序儲存32位ip位址
sin_zero:無含義,只為使結構體sockaddr_in的大小與sockaddr保持一致而插入。必須填充為0;
bind函式原型:int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
因為直接向struct sockaddr 結構體填充位址族,埠號和ip位址會很麻煩。
struct sockaddr 函式原型:
struct sockaddr
主流intel系列cpu以小端序方式儲存資料
網路位元組序統一為大端序
所以我們需要使用位元組序轉換,以下是常用的位元組序轉換函式:
unsigned short htons(unsigned short);
unsigned short ntohs(unsigned short);
unsigned long htonl(unsigned long);
unsigned long ntohl(unsigned long);
// h代表host
// n代表network
注意:資料收發過程中的位元組序轉換是自動的,只有填充sockaddr_in結構體時需要手動完成。
1.5.1 inet_addr函式:
sockaddr_in中儲存的位址資訊為32位整數型,inet_addr函式將幫助我們把ip位址轉換為整數型,
同時也為我們做了網路位元組序轉換
#include in_addr_t inet_addr(const char * string); //把字串格式的ip位址轉為32位整型,並以大端序返回
//成功返回32位大端序整數型值,失敗返回-1(inaddr_none)
1.5.2 inet_aton函式
inet_aton函式不僅可以將字串形式ip位址轉換為32位網路位元組序整數返回,
還能直接將轉換好的ip位址寫入in_addr結構體變數中,
#include int inet_aton(const char * string, struct in_addr * addr);
// 成功返回1(true),失敗返回0(false)
1.5.3 inet_aton函式:
與inet_aton函式功能相反的inet_ntoa函式可以將整型ip位址轉換為字串格式並返回
#include char * inet_ntoa(struct in_addr adr); // 將整型ip轉換為字串ip
// 成功返回轉換的字串位址值,失敗返回-1
注意:inet_aton函式返回型別為char指標,意味著該函式將字串的值儲存在了自動在內部申請的記憶體。
所以程式設計師應將該字串拷貝到其他記憶體空間,否則再次呼叫該函式時,上一次的結果可能會被覆蓋。
建立伺服器端套接字時,若不想手動指定ip位址,可以使用
addr.sin_addr.s_addr = htonl(inaddr_any);
這樣可以自動獲取伺服器端的ip位址,若伺服器有多個位址,則只要埠號一致,就可以從不同ip位址接收資料
網路程式設計的第一件事就是呼叫socket函式建立套接字
#include int socket(int domain, int type, int protocol);
// 成功返回檔案描述符, 失敗返回-1
domain:套接字中使用的協議族(protocol family)資訊
type: 套接字的資料傳輸型別
protocol:計算機間通訊使用的協議
bind函式負責把初始化的位址資訊分配給套接字
#include int bind(int sockfd, struct sockaddr * myaddr, socklen_t addrlen);
// 成功返回0,失敗返回-1
TCP IP 第1章 理解網路程式設計和套接字
1.socket函式建立套接字。2.呼叫bind函式給套接字分配ip位址和埠號。3.呼叫listen函式轉為可接受請求狀態。4.呼叫accept函式受理連線請求 include include include include include include using namespace std v...
套接字程式設計基礎 Unix網路程式設計第3章總結
1.套接字位址結構 以下是其posix定義 struct in addr struct sockaddr in在rhel5中,in addr t是無符號32位整數,in.h檔案中包含 typedef unit32 t in addr t posix規範只有sin family,sin port和si...
第17章 套接字程式設計
1.使用tcp從伺服器獲取資料 end.2.乙個簡單的tcp伺服器 socket server.erl module socket server export start nano server 0,loop 1,nano client eval 1 start nano server gen tc...