Linux 伺服器和客戶端資訊獲取(一)

2021-10-18 15:33:28 字數 3356 閱讀 4276

一、位元組序

二、轉換例項

三、源程式**

位元組序是由於不同的主處理器和作業系統,對大於乙個位元組的變數在記憶體中的存放順序不同而產生的,位元組序是由於cpu和os對多位元組變數的記憶體儲存順序不同而產生的。位元組序通常有大端位元組序和小端位元組序兩種分類方法。

先定義用於16 位位元組序轉換的結構to16,這個結構是乙個聯合型別,通過value來賦值,通過byte陣列來進行位元組序轉換。

#include

/*聯合型別的變數型別,用於測試位元組序,成員value的高低段位元組可以由成員type按位元組訪問*/

/*16為位元組序轉換結構*/

typedef

union

to16;

用於32 位位元組序轉換的結構名稱為to32,與to16 相似,它也有兩個成員變數: value和byte。成員變數value 是乙個unsigned long int 型別的變數,32 位長:成員變數byte 是乙個char 型別的陣列,陣列的長度為4,也是32 位長。32 位位元組序的轉換可以通過to32的value成員變數來賦值,通過byte 來進行位元組序的轉換。

/*32為位元組序轉換結構*/

typedef

union

to32;

showvalue()函式用於列印變數值輸入引數,乙個是變數的位址指標begin,乙個是表示字長的標誌負噸。引數flag 的值為bits16 的時候列印16 位變數的值,引數flag 為bits32 的時候列印32位變數的值。

#define bits16 16

#define bits32 32

/*按照位元組列印,begin為位元組開始,

flag為bits16表示16位,

flag位bits32表示32位。*/

void

showvalue

(unsigned

char

*begin,

int flag)

else

if(flag==bits32)

for(i=

0;i)printf

("\n");

}

int

main()

給16位變數賦初始值0xabcd ,然後進行第一次位元組序轉換,並將結果賦給v16_turn1;

進行第二次位元組序轉換的方式是對v16_turn1進行一次位元組序轉換。

v16_orig.value=

0xabcd

;/*賦值為0xabcd*/

v16_turn1.value=

htons

(v16_orig.value)

;/*第一次轉換*/

v16_turn2.value=

htons

(v16_turn2.value)

;/*第二次轉換*/

給32位變數:賦初始值0x12345678. 然後進行第一次位元組序轉換, 並將結果賦給v32_turnl

進行第二次位元組序轉換,v32_turnl進行一次位元組序轉換。

v32_orig.value=

0x12345678

;/*賦值為0x12345678*/

v32_turn1.value=

htons

(v32_orig.value)

;/*第一次轉換*/

v32_turn2.value=

htons

(v32_turn2.value)

;/*第二次轉換*/

將16 位變盤進行兩次位元組序轉換的結果和32位變最進行兩次位元組序轉換的結果列印出來。

printf

("16 host to network byte order change:\n");

printf

("\torig:\t");

showvalue

(v16_orig.byte,bits16)

;/*16為數值的原始值*/

printf

("\t1 times:");

showvalue

(v16_turn1.byte,bits16)

;/*16位數值第一次轉換後的值*/

printf

("\t2 times:");

showvalue

(v16_turn2.byte,bits16)

;/*16位數值第二次轉換後的值*/

printf

("32 host to network byte order change:\n");

printf

("\torig:\t");

showvalue

(v32_orig.byte,bits32)

;/*32為數值的原始值*/

printf

("\t1 times:");

showvalue

(v32_turn1.byte,bits32)

;/*32位數值第一次轉換後的值*/

printf

("\t2 times:");

showvalue

(v32_turn2.byte,bits32)

;/*32位數值第二次轉換後的值*/

16位變數0xabcd在記憶體中的表示方式為cd在前,ab在後。

進行一次位元組序轉換後變為ab 在前,cd 在後。

進行第二次位元組序轉換後變為cd 在前,ab 在後。

#include

#include

typedef

union

to16;

typedef

union

to32;

#define bits16 16

#define bits32 32

void

showvalue

(unsigned

char

*begin,

int flag)

else

if(flag==bits32)

for(i=

0;i)printf

("\n");

}int

main()

獲取伺服器和客戶端資訊

1 客戶端相關資訊 可由request.servervariables獲取,下面為基本的使用內容 具體檢視方法可使用 foreach string o in request.servervaribles 2 伺服器端資訊 一部分由request.servervaribles中獲取,另外一部分可由op...

Ruby SSL socket 伺服器和客戶端

首先需要準備好伺服器端的證書和key 其次需要準備好客戶端的證書和key 所有伺服器客戶端的證書和key都需要是同乙個ca簽署的。首先請看伺服器 require socket require openssl cacrtf ca.crt crtf server.crt keyf server.key ...

伺服器與客戶端

建立socket操作,建立流式套接字,返回套接字型大小socksrv socket socket int af,int type,int protocol 第乙個引數,指定位址簇 tcp ip只能是af inet,也可寫成pf inet socket socksrv socket af inet,s...