使用nodejs發送和接受tcp請求


使用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形式儲存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM