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\r\n");
});
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. \r\n");
});
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:\n${err.stack}`);
server.close();
});
const message = Buffer.from(`hi\n`);
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流:

nodejs 创建tcp/udp服务器和客户端的更多相关文章
- node.js中通过dgram数据报模块创建UDP服务器和客户端
node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...
- Python 绝技 —— UDP 服务器与客户端
i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演 ...
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库
这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...
- swoole创建TCP服务端和客户端
服务端: server.php <?php //创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0 ...
- windows下UDP服务器和客户端的实现
UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据. 服务器端 1.初始化 WASStartup ( ... ) 2.创建Socket s ...
- 【卷二】网络三—UDP服务器与客户端
这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...
- nodejs创建一个HTTP服务器 简单入门级
const http = require('http');//请求http.createServer(function(request, response){ /*createServer该函数 ...
- 170925_1 Python socket 创建TCP的服务器端和客户端
[Python版本]3.6 [遇到的问题] 客户端和服务器端都遇到:TypeError: a bytes-like object is required, not 'str' [解决方案] 参考:ht ...
随机推荐
- 《CSP.OI吟》
吟 CSP·OI 这个LCT,我听得很懵逼 在 Splay 里面,好像有重链 不用线段树,Splay 来维护 树的形态有改变,不只是那一条边 所以要把整棵树,重新剖一遍 什么重链 ~ 什么轻边 ~ 什 ...
- hashCode、equals详解
hash和hash表是什么? hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值,这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值 ...
- ProBuilder快速原型开发技术 ---操作基础
本篇文章笔者对ProBuilder(以下简称:PB),进行操作基础的介绍. 一:PB大小图标显示方式 PB操作面板有两种显示方式:小图标与大图标.大图标优点是显示清晰操作方便,缺点是没有更加精确的参数 ...
- HDU5739 Fantasia【点双连通分量 割点】
HDU5739 Fantasia 题意: 给出一张\(N\)个点的无向图\(G\),每个点都有权值\(w_i\),要求计算\(\sum_{i=1}^{N}i\cdot G_i % 1e9+7\) 其中 ...
- 牛客15334 Easygoing Single Tune Circulation(后缀自动机+字典树)
传送门:Easygoing Single Tune Circulation 题意 给定n个字符串 s[i],再给出m个查询的字符串 t[i],问 t[i] 是否为某个 s[i] 循环无限次的子串. 题 ...
- P4570 [BJWC2011]元素 (线性基)
题意:n个石头 每个石头有a,b两个属性 要求选出一些石头使得没有一个子集的a属性xor和为0 且b属性和最大 题解:线性基例题了.. 好像需要理解一些性质 1.原序列里任一数都可有由线性基xor得到 ...
- UVA1401 Remember the Word 字典树维护dp
题目链接:https://vjudge.net/problem/UVA-1401 题目: Neal is very curious about combinatorial problems, and ...
- Codeforces Round #686 (Div. 3) E. Number of Simple Paths (思维,图,bfs)
题意:有一个\(n\)个点,\(n\)条边的图,问你长度至少为\(1\)的简单路径有多少条. 题解:根据树的性质,我们知道这颗树一定存在一个环,假如一棵树没有环,那么它的所有长度不小于\(1\)的简单 ...
- 1.ASP.NET Core 管道、中间件、依赖注入
自定义中间件(基于工厂) 自定义中间件(注入到第三方容器)
- KVM Pass-through 上部署 MiniSMB HurricaneII
KVM Pass-through 上部署 MiniSMB HurricaneII 免费网络测试,是一款专门用于测试无线控制器, 智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具 ...