問題:如果主機A存儲格式是按照小端格式存的,主機B按照大端格式取,這時就會出問題。
通過主機以及網絡字節序 解決大小端給通信帶來的問題
特點:
1、網絡協議指定了通訊字節序----大端
2、只有在多字節數據處理時才需要考慮字節序
3、運行在同一臺計算機上的進程相互通信時,一般不用考慮字節序
4、異構計算機之間通訊,需要轉換自己的字節序爲網絡字節序
在需要字節序轉換的時候一般調用特定字節序轉換函數
【htonl htons】用於發數據
htonl函數
uint32_t htonl(uint32_t hostint32)
功能:
將32位主機字節序數據轉換成網絡字節序數據
參數:
hostint32:待轉換的32位主機字節序數據
返回值:
成功:返回網絡字節序的值
頭文件:
#include <arpa/inet.h>
注意:htonl將主機字節序的IP地址 轉換成網絡字節序的IP地址
htons函數
uint16_t htonl(uint16_t hostint16)
功能:
將16位主機字節序數據轉換成網絡字節序數據
參數:
hostint16:待轉換的16位主機字節序數據
返回值:
成功:返回網絡字節序的值
頭文件:
#include <arpa/inet.h>
注意:htons將主機字節序的port端口號 轉換成網絡字節序的port端口
【ntohl ntohs】用於收
uint32_t htonl(uint32_t netint32)
功能:
將32位網絡字節序數據轉換成主機字節序數據
參數:
hostint32:待轉換的32位網絡字節序數據
返回值:
成功:返回主機字節序的值
頭文件:
#include <arpa/inet.h>
注意:將網絡字節序的IP地址 轉換成主機字節序的IP地址 便於用戶二次操作
uint16_t htonl(uint16_t netint16)
功能:
將16位網絡字節序數據轉換成主機字節序數據
參數:
hostint16:待轉換的32位網絡字節序數據
返回值:
成功:返回主機字節序的值
頭文件:
#include <arpa/inet.h>
注意:將網絡字節序的port端口號 轉換成主機字節序的port端口 便於輸出
案例: