zoukankan      html  css  js  c++  java
  • 使用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形式储存。
  • 相关阅读:
    数据库事务隔离级别和传播
    InputStreamReader和BufferedReader的区别
    SQL Server
    java.util.List.subList ,开区间和闭区间
    java中/与%的区别
    mysql 日期比较
    intellij idea 分屏设置 与快捷键
    Java 根据年月日精确计算年龄
    IntelliJ IDEA控制台Console里没有查找快捷键
    eclipse svn同步资源库时忽略某些不需要提交文件类型和文件夹
  • 原文地址:https://www.cnblogs.com/stellar/p/11545036.html
Copyright © 2011-2022 走看看