卜娃娃|nodejs 的融会贯通,你学会了吗?
网络获取本地 IP
function get_local_ip() {const interfaces = require('os').networkInterfaces();let IPAdress = '';for (const devName in interfaces) {const iface = interfaces[devName];for (let i = 0; i < iface.length; i++) {const alias = iface[i];if (alias.family === 'IPv4'}}}return IPAdress;}复制代码TCP 客户端NodeJS 使用 net 模块创建 TCP 连接和服务 。
启动与测试 TCPconst assert = require('assert');const net = require('net');let clients = 0;let expectedAssertions = 2;const server = net.createServer(function (client) {clients++;const clientId = clients;console.log('Client connected:', clientId);client.on('end', function () {console.log('Client disconnected:', clientId);});client.write('Welcome client: ' + clientId);client.pipe(client);});server.listen(8000, function () {console.log('Server started on port 8000');runTest(1, function () {runTest(2, function () {console.log('Tests finished');assert.equal(0, expectedAssertions);server.close();});});});function runTest(expectedId, done) {const client = net.connect(8000);client.on('data', function (data) {const expected = 'Welcome client: ' + expectedId;assert.equal(data.toString(), expected);expectedAssertions--;client.end();});client.on('end', done);}复制代码UDP 客户端利用 dgram 模块创建数据报 socket , 然后利用socket.send发送数据 。
文件发送服务const dgram = require('dgram');const fs = require('fs');const port = 41230;const defaultSize = 16;function Client(remoteIP) {const inStream = fs.createReadStream(__filename); // 从当前文件创建可读流const socket = dgram.createSocket('udp4'); // 创建新的数据流 socket 作为客户端inStream.on('readable', function () {sendData(); // 当可读流准备好 , 开始发送数据到服务器});function sendData() {const message = inStream.read(defaultSize); // 读取数据块if (!message) {return socket.unref(); // 客户端完成任务后 , 使用 unref 安全关闭它}// 发送数据到服务器socket.send(message, 0, message.length, port, remoteIP, function () {sendData();});}}function Server() {const socket = dgram.createSocket('udp4'); // 创建一个 socket 提供服务socket.on('message', function (msg) {process.stdout.write(msg.toString());});socket.on('listening', function () {console.log('Server ready:', socket.address());});socket.bind(port);}if (process.argv[2] === 'client') { // 根据命令行选项确定运行客户端还是服务端new Client(process.argv[3]);} else {new Server();}复制代码HTTP 客户端使用 http.createServer 和 http.createClient 运行 HTTP 服务 。
启动与测试 HTTPconst assert = require('assert');const http = require('http');const server = http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'}); // 写入基于文本的响应头res.write('Hello, world.'); // 发送消息回客户端res.end();});server.listen(8000, function () {console.log('Listening on port 8000');});const req = http.request({port: 8000}, function (res) { // 创建请求console.log('HTTP headers:', res.headers);res.on('data', function (data) { // 给 data 事件创建监听 , 确保和期望值一致console.log('Body:', data.toString());assert.equal('Hello, world.', data.toString());assert.equal(200, res.statusCode);server.unref();console.log('测试完成');});});req.end();复制代码
推荐阅读
- 点亮精彩生活|“芭比娃娃”卸妆火了!当素颜曝光那一刻,网友:吓的我一哆嗦!
- 琉璃娃娃的梦|最经典的“许仙”反串女演员叶童结婚多年无子,近照流出老态尽显
- 帅不过三秒|求赵露思别再穿娃娃裙了,裙摆只是加了层褶,腿就显瘦到我崩溃
- 琉璃娃娃的梦|李佳琦也要出道拍戏?古装造型帅如邓伦,网红逆袭成功好励志
- 卜娃娃|音视频开发4. ZLMediaKit库入门使用 编译安装
- 养生知多少|张佳宁看着哪里像30岁?穿蕾丝娃娃领波点裙,就是个18岁小姐姐
- 卜娃娃|飒粉福利|瞧,她在丽江嗨.....
- 日剧盘点|这仍是我熟悉的张雪迎吗?麻花辫配娃娃裙,简直软萌到不像话
- 穿搭|柳岩这回把好身材都藏起来,吊带娃娃装配开叉裤,不露反而更气质
- 卜娃娃|能听声辨位、追踪脚步,这个智能摄像头还是小黄人
