nodejs——网络编程模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法。dgram模块用于UDP网络编程。
参考链接:https://nodejs.org/api/net.html, https://nodejs.org/api/dgram.html
一、TCP Server
net模块通过net.createServer方法创建TCP服务器,通过net.connect方法创建客户端去连接服务器。
1、通过net模块创建一个TCP Server
// server.js
var 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.js
var 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.js
var 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.js
var 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.js
var 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.js
var 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
服务器端口没开。
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5056519.html有问题欢迎与我讨论,共同进步。
nodejs——网络编程模块的更多相关文章
- nodejs模块——网络编程模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.dgram模块用于UDP网络编程. 参考链接:https://nodejs.org/api/net.html, ...
- nodejs网络编程
通过NodeJS,除了可以编写一些服务端程序来协助前端开发和测试外,还能够学习一些HTTP协议与Socket协议的相关知识,这些知识在优化前端性能和排查前端故障时说不定能派上用场.本章将介绍与之相关的 ...
- Python3常用网络编程模块介绍
一.socket模块 网络服务都是建立在socket基础之上的,socket是网络连接端点,是网络的基础:每个socket都被绑定到指定的IP和端口上: 1.首先使用socket(family=AF_ ...
- 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型
进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...
- Python第十三章-网络编程
网络编程 一.网络编程基础 python 的网络编程模块主要支持两种Internet协议: TCP 和 UDP. 1.1通信协议 通信协议也叫网络传输协议或简称为传送协议(Communications ...
- 网络编程与socket套接字
网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 传输 ...
- nodejs学习笔记之网络编程
了解一下OSI七层模型 OSI层 功能 TCP/IP协议 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化 ...
- Python_socket常见的方法、网络编程的安全注意事项、socketsever模块、浏览器中在一段时间记录用户的登录验证机制
1.socket常见的方法 socket_常见方法_服务器端 import socket from socket import SOL_SOCKET,SO_REUSEADDR sk = socket. ...
- python基础-requests模块、异常处理、Django部署、内置函数、网络编程
网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...
随机推荐
- C# 中几个小“陷阱”
每天写代码,偶尔就会有让你抓狂的时候:代码改了千百遍,蓦然回首,Bug就在灯火阑珊处……这里就列举一些容易犯错的几个小地方,以后遇到了其他的,再慢慢添加. 1. 获取程序当前运行路径 情景复现 ...
- 15款最佳的MySQL管理工具和应用程序
工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...
- 用JS描述的数据结构及算法表示——栈和队列(基础版)
前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...
- 部署基于国际版Azure的SharePoint三层架构服务器场
前言 微软Azure国际版已经很普及了,这里没有用国内版(世纪互联),用的是国际版,当然是由于公司性质的缘故.这里一步步图文的方式,分享给大家创建Azure国际版的SharePoint三层架构的过程, ...
- 通过API找出Autodesk Vault中某个用户组可以访问的Vault
首先在Vault Explorer中可以这样查看和更改某个用户组有权访问的vault Tools –> Administration –> Global Settings –> Gr ...
- 不直接登录SharePoint服务器,通过远程直接部署WSP解决方案包
在这之前不得不说一下Sysinternals,他最初是一个网站,网站上会经常发布一些有用的系统扩展工具,之后运营这个网站的公司被微软收购.像非常著名的Procmon,AutoRuns.Process ...
- HttpClient示例
<%@page import="com.sun.xml.ws.client.BindingProviderProperties"%> <%@page conten ...
- 最全面的NSDateHelper 分享
NSDateUtil 分享 (ios开发交流群:486468672) 代码下载:https://github.com/foxswang/NSDateUtil 史上最全面NSDate Utility 没 ...
- 复杂sql分组查询 ( pivot)
一个数据表里面字段有年.月.日.金额.支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额.如下图: 原sql ...
- Mac系统如何编辑hosts文件
Mac系统如何编辑hosts文件 Hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系 统会首先 ...