• nodejs 创建tcp/udp服务器和客户端


    TCP

    server

    // https://nodejs.org/api/net.html
    
    const net = require("net");
    
    // https://nodejs.org/api/net.html#net_net_createserver_options_connectionlistener
    // https://nodejs.org/api/net.html#net_class_net_socket
    const server = net.createServer((c /*net.Socket*/) => {
      console.log("client connected");
    
      c.setEncoding("utf-8");
      c.on("data", (data) => {
        // 处理发送的数据,telnet连接后,会把键盘的输入事件发送过来
        console.log(data);
        c.write("hello
    ");
      });
      c.on("end", () => {
        console.log("client disconnected");
      });
    
      // https://stackoverflow.com/questions/36314892/when-should-i-use-socket-pipe-on-nodejs-net-socket
      // tcp 是双向的,pipe会把发送来的信息原封不动的返回去
      // c.pipe(c);
    });
    server.on("error", (err) => {
      console.log(err.message);
    });
    server.listen(5000, () => {
      console.log("server bound");
      console.log(server.address());
    });
    
    // 测试
    // telnet localhost 5000
    

    client

    const net = require("net");
    
    // https://nodejs.org/api/net.html#net_net_createconnection_options_connectlistener
    const client = net.createConnection({ port: 5000 }, () => {
      console.log("connected to server!");
      client.write("i'm tcp client. 
    ");
    });
    client.on("data", (data) => {
      console.log(data.toString());
      client.end();
    });
    client.on("end", () => {
      console.log("disconnected from server");
    });
    

    tcp流:

    UDP

    server

    // https://nodejs.org/api/dgram.html
    
    const dgram = require("dgram");
    const server = dgram.createSocket("udp4");
    
    server.on("error", (err) => {
      console.log(`server error:
    ${err.stack}`);
      server.close();
    });
    
    const message = Buffer.from(`hi
    `);
    server.on("message", (data, rinfo) => {
      console.log(data.toString());
      console.log(rinfo);
      server.send(message, rinfo.port, rinfo.address, (err) => {
        if(err) console.log(err);
      });
    });
    
    server.on("listening", () => {
      console.log(`server listening`);
      console.log(server.address());
    });
    
    server.bind(5000);
    

    client

    const dgram = require("dgram");
    const message = Buffer.from(`i'm udp client.`);
    const client = dgram.createSocket("udp4");
    
    client.on("error", (err) => {
      console.log(err);
    });
    
    client.on("message", (data, rinfo) => {
      console.log(data.toString());
    });
    
    client.send(message, 5000, "localhost", (err) => {
      // client.close();
    });
    

    udp流:

  • 相关阅读:
    (转载)Java读取ipa中info.plist获取版本信息
    (转)使用Eclipse开发Android源码
    IOS端的摇一摇功能
    (转) 自动编译iOS工程,生成app及ipa文件的方法
    Mac OS 上设置 JAVA_HOME
    macjava
    JS超级酷的导航菜单代码
    JavaScript+Css实现的鼠标悬停时动态翻滚的紫色菜单导航
    全国的省市县联动代码
    【荐】JavaScript制作可伸缩的淡绿色菜单导航
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13111514.html
Copyright © 2020-2023  润新知