第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求問,關(guān)于htons函數(shù)的問題,具體請看下面的情況!

求問,關(guān)于htons函數(shù)的問題,具體請看下面的情況!

慕工程0101907 2021-10-13 14:11:12
我用htons()為什么轉(zhuǎn)換后的端口會不一樣?比如我用htons(4367),調(diào)試的結(jié)果居然變?yōu)?857,這是為什么?怎么解決啊?------------------int connectclient(){SOCKET s;s=::socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN sin;sin.sin_family=AF_INET;sin.sin_port=htons(4367);sin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");---------------------------------------------------調(diào)試跟蹤居然端口變成了3857。。這是為什么呀。。程序好像沒錯呀?下面這段1589居然變成了13574,好像指定端口居然成了隨機端口了。sockaddr_in client;client.sin_family=AF_INET;client.sin_port=htons(1589);client.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");不好意思。1樓。想來你沒搞清。我不是不懂這個函數(shù)的原意。是說我明明指定端口。。而程序在編譯時卻自動改變端口號。造成我的客戶端無法連接上我的服務(wù)端的指定端口?要怎么才能連接上?(我的客戶端的指定端口和服務(wù)端的一樣,這沒有錯)
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

htons 是把你機器上的整數(shù)轉(zhuǎn)換成“網(wǎng)絡(luò)字節(jié)序”, 網(wǎng)絡(luò)字節(jié)序是 big-endian,也就是整數(shù)的高位字節(jié)在前面。 而我們常用的 x86 CPU (intel, AMD) 電腦是 little-endian,也就是整數(shù)的低位字節(jié)放在前面。舉個例子吧。假定你的port是
0x1234,

在網(wǎng)絡(luò)字節(jié)序里 這個port放到內(nèi)存中就應(yīng)該顯示成
addr addr+1
0x12 0x34

而在x86電腦上,0x1234放到內(nèi)存中實際是:
addr addr+1
0x32 0x12

htons 的用處就是把實際內(nèi)存中的整數(shù)存放方式調(diào)整成“網(wǎng)絡(luò)字節(jié)序”的方式。

再次回樓主,你的問題就是我說的, htons(4367) 后,在x86機器上,就是變成了 3857,就是因為字節(jié)序被調(diào)整了,這是正確的. 4367十六進制是0x110F,由于是little endian所以在內(nèi)存中存放的是
0x0F 0x11

htons后,變成網(wǎng)絡(luò)字節(jié)續(xù),也就是
0x11 0x0F
這個數(shù)字如果你去看了話,就是
3857.

你debug的時候,直接去看端口的內(nèi)存里的內(nèi)容,就明白了。


查看完整回答
反對 回復(fù) 2021-10-17
  • 1 回答
  • 0 關(guān)注
  • 486 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號