博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs——网络编程模块
阅读量:7065 次
发布时间:2019-06-28

本文共 4083 字,大约阅读时间需要 13 分钟。

net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法。dgram模块用于UDP网络编程。

参考链接:, 

一、TCP Server

net模块通过net.createServer方法创建TCP服务器,通过net.connect方法创建客户端去连接服务器。

1、通过net模块创建一个TCP Server

// server.jsvar net = require('net');// 创建TCP服务器var server = net.createServer(function(socket) {    console.log('client connected');    // 监听客户端的数据    socket.on('data', function(data) {        console.log('server got data from client: ', data.toString());    });    // 监听客户端断开连接事件    socket.on('end', function(data) {        console.log('connection closed');    });    // 发送数据给客户端    socket.write('Hello\r\n');});// 启动服务server.listen(8080, function() {    console.log('server bound');});

2、创建一个客户端

// client.jsvar net = require('net');// 连接服务器var client = net.connect({port: 8080}, function() {    console.log('connected to server');    client.write('World!\r\n');});// 接收服务端的数据client.on('data', function(data) {    console.log('client got data from server: ', data.toString());    // 断开连接    client.end();});// 断开连接client.on('end', function() {    console.log('disconnected from server');});

在一个终端运行TCP服务器代码,另一个终端运行TCP客户端代码,结果如下:

二、简易聊天室服务器

1、简易聊天室服务端

首先创建TCP服务器;然后是接收客户端连接请求;获取客户端发送过来的数据;允许多个客户端同时连接,所以需要接收所有的用户连接;服务器广播数据,把来自客户端的数据转发送给其他所有客户端;最后把关闭连接的客户端从服务器广播列表中给删除掉。

// chatServer.jsvar net = require('net');//第一步 创建TCP服务器var server = net.createServer();// 存储所有客户端socket//第四步,服务器接收所有的用户连接 var sockets = []; //第二步 接收客户端请求server.on('connection', function(socket) {
console.log('Got a new connection');  //第五步,服务器广播数据 sockets.push(socket);  //第三步,获取客户端发送过来的数据 socket.on('data', function(data) {
console.log('Got data: ', data); sockets.forEach(function(otherSocket) { if (otherSoecket !== socket) { otherSocket.write(data); } }); ]); // 第六步,关闭连接客户端从服务器广播列表删除 socket.on('close', function() { console.log('A client connection closed'); var index = sockets.indexOf(socket); sockets.splice(index, 1); });});server.on('error', function(err) { console.log('Server error: ', err.message);});server.on('close', function() { console.log('Server closed');});server.listen(8080);

2、简易聊天室客户端 

先解释process模块

process模块是Node.js的一个全局模块,可以在任何地方直接使用而无需通过require方法引入。process模块允许获得或修改当前Node.js进程的设置。

process.stdin用于获取来自标准输入的可读流(Readable Stream)。

客户端代码

// chatClient.jsvar net = require('net');process.stdin.resume();process.stdin.setEncoding('utf8');var client = net.connect({ port: 8080 }, function() {    console.log('Connected to server');    // 获取输入的字符串    console.log('input: ');    process.stdin.on('data', function(data) {        // 发送输入的字符串到服务器        console.log('input: ');        client.write(data);        // 输入 'close' 字符串时关闭连接        if (data === 'close\n') {            client.end();        }    });});// 获取服务端发送过来的数据client.on('data', function(data) {    console.log('Other user\'s input', data.toString());});client.on('end', function() {    console.log('Disconnected from server');    // 退出客户端程序    process.exit();});

一个终端窗口执行$ node chatServer.js运行服务器代码。

另外两个终端窗口执行$ node chatClient.js运行客户端代码。

结果如下:

三、UDP编程 

UDP通过dgram.createSocket创建服务。

1、服务器端代码

// udpServer.jsvar dgram = require("dgram");var server = dgram.createSocket("udp4");server.on("error", function(err) {    console.log("server error:\n" + err.stack);    server.close();});// 接收来自客户端的消息server.on("message", function(msg, rinfo) {    console.log("server got: " + msg.toString() + " from " + rinfo.address + ":" + rinfo.port);});// 监听服务server.on("listening", function() {    var address = server.address();    console.log("server listening on " + address.address + ":" + address.port);});server.bind(41234);// server listening 0.0.0.0:41234

2、客户端

发送消息必须通过Buffer创建。

// udpClient.jsvar dgram = require('dgram');var client = dgram.createSocket('udp4');var message = new Buffer('hello shiyanlou');client.send(message, 0, message.length, 41234, 'localhost', function(err, bytes) {    client.close();});

运行结果如下

四、排错

1、Error: connect ECONNREFUSED 127.0.0.1:8080

服务器端口没开。

本文作者,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:有问题欢迎与我讨论,共同进步。 

你可能感兴趣的文章
WiFi覆盖下的生活 享受便利的同时 别忘记了安全
查看>>
关于ios 8 7 下的模态窗口大小的控制 代碼+場景(mainstoryboard)( Resizing UIModalPresentationFormSheet )...
查看>>
Linux软件包的管理--YUM
查看>>
Axis2发布webservice(1)--0配置发布
查看>>
Java Web笔记 – Servlet中的Filter过滤器的介绍和使用 编写过滤器
查看>>
我奋斗了18年,不是为了和你一起喝咖啡
查看>>
gearman简单介绍
查看>>
《Typecript 入门教程》 3、接口
查看>>
jsp的几种跳转比较
查看>>
用oracle查询当前数据库中的所有表
查看>>
决心书
查看>>
git 从版本控制中删除文件及.gitignore的用法
查看>>
cacti安装
查看>>
Spark核心概念
查看>>
Kali***(二)之被动信息收集——搜索引擎
查看>>
组策略参考文档1-共享打印机
查看>>
Linux的包管理工具介绍
查看>>
实验五 利用三层交换机实现VLAN间路由
查看>>
程序员如何成为架构师
查看>>
fiddler抓包之关于connect连接
查看>>