Node.js也提供了对socket的支持,它提供了一个net(网络)模块用来处理和TCP相关的操作,提供了dgram模块用来处理UDP(数据报)相关操作
net 模块给你提供了一个异步的网络封装. 它包含创建服务器和客户端(称为流)的功能
net模块通过net.createServer方法创建TCP服务器
// 服务端
var net = require('net');
// 创建服务器
server = net.createServer();
var users=[];//保存链接进来的客户端
// 监听客户端是否连接成功 socket客户端 能获取到客户端的ip地址
server.on('connection',function(socket){
console.log("当前ip:【"+socket.remoteAddress+"】端口号:【"+socket.remotePort+"】");
// 将客户端保存到数组中
users.push(socket);
//接受客户端发送过来的数据
socket.on('data',function(data){
var msg = data.toString();
//服务器分发数据给所有的客户端
users.forEach(function(client){
if(socket != client){
client.write(client.remotePort+":"+msg);
}
});
});
//可能会报错
server.on('error',function(){
console.log('网络异常,请稍后重试......')
})
});
// 启动服务器
server.listen(3000,'127.0.0.1',function(){
console.log([
" _ooOoo_",
" o8888888o",
" 88\" . \"88",
" (| -_- |)",
" O\\ = /O",
" ____/`---'\\____",
" .' \\\\| |// `.",
" / \\\\||| : |||// \\",
" / _||||| -:- |||||- \\",
" | | \\\\\\ - /// | |",
" | \\_| ''\\---/'' | |",
" \\ .-\\__ `-` ___/-. /",
" ___`. .' /--.--\\ `. . __",
" .\"\" '< `.___\\_<|>_/___.' >'\"\".",
" | | : `- \\`.;`\\ _ /`;.`/ - ` : | |",
" \\ \\ `-. \\_ __\\ /__ _/ .-` / /",
"======`-.____`-.___\\_____/___.-`____.-'======",
" `=---='",
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
" 佛祖保佑 永无BUG 服务器启动"
].join('\n'));
})
// 客户端
var net = require('net');
//创建客户端
var client = net.createConnection({
port:3000,
host:'127.0.0.1'
});
//监听客户端 是否连接服务成功 on监听
client.on('connect',function(){
//接受控制台的数据
process.stdin.on('data',function(data){
var client_msg=data.toString().trim();
//给服务端发送数据
client.wrient(client_msg);
});
});
//接收服务端返回的数据
client.on('data',function(data){
console.log(data)
})