请选择 进入手机版 | 继续访问电脑版
用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 244|回复: 0

node.js sockets net 客户端和服务端

[复制链接]

909

主题

912

帖子

3877

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3877
发表于 2018-1-11 19:21:12 | 显示全部楼层 |阅读模式
服务端
  1. var net = require('net');  
  2.   
  3. var server = net.createServer();  
  4.   
  5. //聚合所有客户端  
  6. var sockets = [];
  7.   
  8. //接受新的客户端连接  
  9. server.on('connection', function(socket){  
  10.     // console.log('got a new connection');
  11.     socket.uid= Math.random().toString().split('.')[1];
  12.     console.log('uid:',socket.uid);  
  13.     sockets.push(socket);  
  14.     //从连接中读取数据  
  15.     socket.on('data', function(data){
  16.         var message= 'uid:'+socket.uid.toString()+' said message:'+data.toString();
  17.         console.log(message);  
  18.   
  19.         //广播数据  
  20.         //每当一个已连接的用户输入数据,就将这些数据广播给其他所有已连接的用户  
  21.         sockets.forEach(function(otherSocket){
  22.             // console.log('otherSocket:',otherSocket.uid);
  23.             if (otherSocket.uid !== socket.uid){  
  24.                 otherSocket.write(message);      
  25.             }  
  26.         });
  27.     });
  28.     //删除被关闭的连接 客户端关闭事件
  29.     socket.on('close', function(){  
  30.         console.log('uid:'+socket.uid.toString()+'  connection closed');  
  31.         var index = sockets.indexOf(socket);  
  32.         sockets.splice(index, 1);  
  33.     });
  34.     //数据错误事件
  35.     socket.on('error',function(exception){
  36.         console.log('uid:'+socket.uid.toString()+'  socket error:' + exception);
  37.         socket.end();
  38.     });  
  39. });  
  40. //服务器错误事件  
  41. server.on('error', function(err){  
  42.     console.log('Server error:', err.message);  
  43. });  
  44. //服务器监听事件
  45. server.on('listening',function(){
  46.     console.log("server listening:" + server.address().port);
  47. });
  48. //服务器关闭事件
  49. server.on('close', function(){  
  50.     console.log('Server closed');  
  51. });  
  52.    
  53. server.listen(4000, () => {
  54.   console.log('server start');
  55. });
复制代码


客户端

  1. var net = require('net');  
  2. var port = 4000;  
  3. var quitting = false;  
  4. var conn;  
  5. var retryTimeout = 3000;    //三秒,定义三秒后重新连接  
  6. var retriedTimes = 0;   //记录重新连接的次数  
  7. var maxRetries = 10;    //最多重新连接十次  
  8.   
  9. process.stdin.resume(); //process.stdin流来接受用户的键盘输入,这个可读流初始化时处于暂停状态,调用流上的resume()方法来恢复流  
  10.   
  11. process.stdin.on('data', function(data){  
  12.     if (data.toString().trim().toLowerCase() === 'quit'){  
  13.         quitting = true;  
  14.         console.log('quitting');  
  15.         conn.end();  
  16.         process.stdin.pause();  
  17.     } else {  
  18.         conn.write(data.toString() );  
  19.     }  
  20. });  
  21.   
  22. //连接时设置最多连接十次,并且开启定时器三秒后再连接  
  23. (function connect() {  
  24.     function reconnect() {  
  25.         if (retriedTimes >= maxRetries) {  
  26.             throw new Error('Max retries have been exceeded, I give up.');  
  27.         }  
  28.         retriedTimes +=1;  
  29.         setTimeout(connect, retryTimeout);  
  30.     }  
  31.   
  32.     conn = net.createConnection(port);  
  33.     // 处理响应的回调函数
  34.     // var callback = function(response){
  35.     //     // 不断更新数据
  36.     //     var body = '';
  37.     //     response.on('data', function(data) {
  38.     //         body += data;
  39.     //     });

  40.     //     // 数据接收完成
  41.     //     response.on('end', function() {
  42.     //         console.log(body);
  43.     //         response.end();
  44.     //     });
  45.     // }  
  46.     conn.on('connect', function() {  
  47.         retriedTimes = 0;  
  48.         console.log('connect to server');  
  49.     });   
  50.   
  51.     //处理请求错误
  52.     conn.on('error', function(err) {
  53.         console.log('Error in connection:', err);
  54.     });  
  55.     conn.on('close', function() {  
  56.         if(! quitting) {  
  57.             console.log('connection got closed, will try to reconnect');  
  58.             reconnect();  
  59.         }  
  60.     });  
  61.     conn.on('end', function(){
  62.       console.log('disconnected from server');
  63.     });   
  64.     //打印  
  65.     conn.pipe(process.stdout, {end: false});  
  66. })();  

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部