创建TCP服务器
var server = net.createServer([options], [connectionListener]) // 相当于: // var server = net.createServer([options]); // server.on('connection', connectionListener);
方法1:
// 监听端口 // port 若为0则分配随机端口号 // host 缺省则监听来自任何ipv4地址的客户端连接 // backlog 默认为511,设定等待队列中最大的连接数,超过则拒绝 server.listen(port, [host], [backlog], [callback])
方法2:
// 监听指定路径 server.listen(path, [callback])
方法3:
// 监听socket句柄 server.listen(handle, [callback])
以上三种方法的 callback 可改写为:
server.on('listening', function () { // callback code here })
示例:
var net = require('net');
var server = net.createServer(function(socket) {
console.log('客户端与服务器的连接已建立');
console.log('socket信息是:', socket.address())
// 获取客户端与服务器的连接数
server.getConnections(function(err, count) {
console.log('当前连接数为:', count);
// 设置最大连接数,超过这个连接数后,客户端将无法得到响应
server.maxConnections = 2;
console.log('最大连接数为:', server.maxConnections);
})
// 关闭服务器,不再接收所有连接
// server.close(function() {
// console.log('服务器已关闭');
// })
});
server.listen(1234, 'localhost', function() {
console.log('正在监听端口1234');
console.log('server信息是:', server.address())
});
server.on('error', function(e) {
// 端口被占用
if (e.code == 'EADDRINUSE') {
console.log('error: 端口已被占用');
}
})
处理socket连接
var net =require('net');
var server = net.createServer();
server.on('connection', function(socket) {
console.log('socket信息是:', socket.address());
// 监听socket连接
socket.on('data', function(data) {
console.log('共接收到%d字节的数据:', socket.bytesRead);
// data 默认是 buffer 流
// 设定编码
// socket.setEncoding('utf8');
// 或使用 data.toString()
console.log(data.toString());
});
// 监听关闭连接
socket.on('end', function () {
console.log('连接被客户端关闭!');
})
//向客户端发送数据
socket.write('哈喽!这是来自服务器的数据!')
});
server.listen(1234, 'localhost');
将这段脚本存到 server.js 启动这段脚本
$ node server.js
运行telnet并输入任意数据试试:
telnet localhost 1234
- 创建TCP客户端
var socket = new net.Socket([options])
// options.fd 文佳描述符
// options.type 可选tcp4/tcp6/unix 指定协议
方法1:
socket.on('connect', function(){
// callback code here.
})
方法2:
sockec.connect(path, [connectionListener])
socket.remoteAddress 远程地址
socket.remotePort 远程端口
socket.localAddress 本地地址
localPort 本地端口
写入数据:
socket.write(data, [encoding], [callback])
示例:
var net = require('net');
var client = new net.Socket();
client.setEncoding('utf8');
client.connect(1234, 'localhost', function(){
console.log('客户端已连接到服务器');
// 向服务器发送数据
client.write('你好,我是来自客户端的消息!');
console.log('已发送%d字节的数据', client.bytesWritten);
// 关闭连接
// client.end([data], [encoding])
// client.end('客户端已关闭连接!')
});
// 监听数据接收
client.on('data', function (data) {
console.log('客户端接收到来自服务器的数据:', data);
});
// 监听错误
client.on('error', function (e) {
console.log('error: ', e);
// 销毁这个错误的socket,确保不会被使用
client.destroy();
})
将这段代码另存为 client.js
先启动上面的 server.js
$ node server.js
再新建终端窗口启动 client.js 进行通信
$ node client.js
net模块判断IP地址
// 判断输入是否为IP var type = net.isIP(ip); switch (type) { case 0: console.log('不是一个IP'); break; case 4: console.log('是一个IPV4地址'); break; case 6: console.log('是一个IPV6地址'); } // 判断是否为 IPV4地址 net.isIPV4(ip) // 判断是否为 IPV6地址 net.isIPV6(ip)
dgram 模块实现UDP通信
服务器代码 udpServer.js :
var dgram = require('dgram'); var server = dgram.createSocket('udp4'); server.on('message', function (msg, info) { console.log('收到客户端信息:', msg); console.log('客户端地址信息:', info); // 往客户端发送信息 var buff = new Buffer('已收到这条信息:', msg); server.send(buf, 0, buf.length, info.port, info.address); }) // 监听 server.on('listening', function () { console.log('正在监听:', server.address()); }); // 绑定端口 server.bind(12345, 'localhost');
客户端代码 udpClient.js:
var dgram = require('dgram'); var message = new Buffer('哈喽!这是来自客户端的消息,我是小赖呦'); var client = dgram.createSocket('udp4'); // 发送消息 client.send(message, 0, message.length, 12345, 'localhost', function (err, bytes) { if (err) { console.log('发送失败'); } console.log('已发送%d字节的数据', butes); }); // 监听 client.on('message', function (msg, info) { console.log('收到服务器信息:', msg); console.log('服务器地址信息:', info); })