解決大小端對網絡通信帶來的問題

問題:如果主機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端口 便於輸出

案例:
在這裏插入圖片描述

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