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

参考链接:https://nodejs.org/api/net.htmlhttps://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模块——网络编程模块的更多相关文章

  1. nodejs——网络编程模块

    net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.dgram模块用于UDP网络编程. 参考链接:https://nodejs.org/api/net.html, ...

  2. Python3常用网络编程模块介绍

    一.socket模块 网络服务都是建立在socket基础之上的,socket是网络连接端点,是网络的基础:每个socket都被绑定到指定的IP和端口上: 1.首先使用socket(family=AF_ ...

  3. 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型

    进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...

  4. Python第十三章-网络编程

    网络编程 一.网络编程基础 python 的网络编程模块主要支持两种Internet协议: TCP 和 UDP. 1.1通信协议 通信协议也叫网络传输协议或简称为传送协议(Communications ...

  5. 网络编程与socket套接字

    网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 ​ 传输 ...

  6. Python_socket常见的方法、网络编程的安全注意事项、socketsever模块、浏览器中在一段时间记录用户的登录验证机制

    1.socket常见的方法 socket_常见方法_服务器端 import socket from socket import SOL_SOCKET,SO_REUSEADDR sk = socket. ...

  7. python基础-requests模块、异常处理、Django部署、内置函数、网络编程

     网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...

  8. 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  9. 铁乐学Python_Day33_网络编程Socket模块1

    铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...

随机推荐

  1. HDU - 3478 Catch(判奇环/二分图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意 给一个无向图和小偷的起点,小偷每秒可以向相邻的点出发,问有没有一个时间点小偷可能出现在任何点. 分析 ...

  2. 第一节:从程序集的角度分析System.Web.Caching.Cache ,并完成基本封装。

    一. 揭开迷雾 1. 程序集准备 a.  需要给项目添加 System.Web 程序集. b.  需要给使用的地方添加两个引用. 2. 程序集探究      在对应的类中输入关键字 Cache,选中点 ...

  3. xml的解析方式的简介

    xml的解析的简介(写到java代码) *xml是一个标记型文档 *js使用dom解析标记型文档? -根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象 -do ...

  4. log4j2 的使用

    log4j2 是 log4j 的升级,更为方便,更为强大. log4j2.xml 的配置以及 log4j2的依赖包使用log4j2 并没有其他的依赖包,只是在使用log4j的情况下,需要别的进行桥接 ...

  5. 20155330 2016-2017-2 《Java程序设计》第六周学习总结

    20155330 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...

  6. 在window系统下安装Sass

    1.Ruby下载 因为Sass依赖于Ruby环境,所以应先在window系统下安装Ruby,Ruby安装包下载链接:http://rubyinstaller.org/downloads/ 2.Ruby ...

  7. 解决NO migrations to apply

    创建表之后,遇到models模型变动,故当时做了删除应用文件夹下migrations文件,删除后重建,但重建后执行模型合并操作结果为No Changes,无法创建数据表 执行python3 manag ...

  8. Latex 算法Algorithm

    在计算机科学当中,论文当中经常需要排版算法.相信大家在读论文中也看见了很多排版精美的算法.本文就通过示例来简要介绍一下 algorithms 束的用法.该束主要提供了两个宏包,包含两种进行算法排版的环 ...

  9. [ VB ] If 运算符 [ C# ] 条件运算符 (?:)

    //保留了原文   ()为大概的意思 VB で使用していた IIf 関数の代わりに VB2008 からは If 演算子 を使用可能となった. また. C# では.条件演算子 (?:) で同等の記述が可 ...

  10. Python3学习笔记08-tuple

    元组与列表类似,不同之处在于元组的元素不能修改 元组使用小括号,列表使用方括号 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 tup1 = ('Google', 'Runoob', 19 ...