使用nodejs發送和接受tcp請求 // 使用 promise-socket 同步執行 const {PromiseSocket} = require("promise-socket") const client = async (path, fileName) => { const socket = new PromiseSocket(); socket.setTimeout(1000) await socket.connect({host:ip, port:port}); let response = await socket.read(1) await socket.write(Buffer.from([IP.length%16, IP.length/16])); await socket.end(); return true; } tcp 是以字節流來發送和接受數據,通過wireshark可以看到 00 50 56 99 e8 00 3c fd fe 7c 78 01 08 00 45 00 00 34 cc 3b 40 00 36 06 77 58 3d a4 2f ce 0a 15 89 a9 1d f4 a6 67 a6 c8 9f e0 dd cc f7 fd 80 11 00 08 4a 6b 00 00 01 01 08 0a 6e ed 67 b1 05 2f 6e 7b 其中 00 表示一個字節(8位), 8位的二進制數最多可以表示255(11111111); 所以如果要算出一個字節的數具體是多少,可以通過與 256的n次方 求商或者取余得到; 12345 1 226 64 1 E2 40 從右往左:第n位數 = (12345/256的n次方)%256 n從0開始 例子: 將數字1234以 2 bytes發出 1. 1234轉換為16進制:04D2 2. Buffer.from([1234/256, 1234%256]); //大端 Buffer.from([1234%256, 1234/256]); //小端 計算機硬件有兩種儲存數據的方式:大端字節序(big endian)和小端字節序(little endian)。 舉例來說,數值0x2211使用兩個字節儲存:高位字節是0x22,低位字節是0x11。 大端字節序:高位字節在前,低位字節在后,這是人類讀寫數值的方法。 小端字節序:低位字節在前,高位字節在后,即以0x1122形式儲存。