本文,将会展示如何用Nodejs内置的net模块开发一个TCP服务器,同时模拟一个客户端,并实现客户端和服务端交互。

net模块是nodejs内置的基础网络模块,通过使用net,可以创建一个简单的tcp服务器。

示例如下:

var net =require("net");

//初始化客户端连接数量
var clients = 0;

var server = net.createServer(function(client){

    //客户端数量
    clients ++;
    var client_id = clients;

    console.log("client connected:",client_id);

    //断开连接
    client.on("end",function(){
        console.log("client disconnected:",client_id);
    })

    //发信息给连接客户端
    client.write("welcome client:"+client_id+"\r\n");
    client.pipe(client);
});

server.listen(8000,function(){
    console.log("server started on port 8000");
});

这段代码,会建立起一个tcp服务器,监听在8000端口。

当有客户端连接时,会通过pipe(管道)以流的方式,向客户端输出一段内容。

比如用浏览器访问:

这时,程序也会输出信息,显示有客户端连接了:

对代码稍做改动,添加一个客户端功能:

var net =require("net");

//初始化客户端连接数量
var clients = 0;

var server = net.createServer(function(client){

    //客户端数量
    clients ++;
    var client_id = clients;

    console.log("client connected:",client_id);

    //断开连接
    client.on("end",function(){
        console.log("client disconnected:",client_id);
    })

    //发信息给连接客户端
    client.write("welcome client:"+client_id+"\r\n");
    client.pipe(client);
});

server.listen(8000,function(){
    console.log("server started on port 8000");

    run_test(1);
});

//模拟一个客户端
function run_test(id){
    var client = net.connect(8000,"127.0.0.1");

    client.on("data",function(){
        console.log("id=",id);
    });

    client.on("end",function(){
        console.log("end");
    })
}

当服务器启动时,模拟一个客户端进行连接。

当客户端收到信息时,输出信息。

执行效果如下:

更多本系列文章请见:http://www.fairysoftware.com/node.js_in_practice.html

Node.js实战14:一个简单的TCP服务器。的更多相关文章

  1. 用 Node.js 实现的最简单的 HTTP 服务器

    用 Node.js 实现的最简单的 HTTP 服务器 //app.js var http = require('http'); http.createServer(function(req, res) ...

  2. 【实验 1-1】编写一个简单的 TCP 服务器和 TCP 客户端程序。程序均为控制台程序窗口。

    在新建的 C++源文件中编写如下代码. 1.TCP 服务器端#include<winsock2.h> //包含头文件#include<stdio.h>#include<w ...

  3. Node.js实战(一)之概述

    , 一.Node.js介绍 Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进 ...

  4. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理

    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错. 当我们在访问一个站点的时候,如果访问的地址不存在(404), ...

  5. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志

    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的事情就是认识自己. 在一个真实的项目中,开发只是整个投入的一小部分 ...

  6. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks

    视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...

  7. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层

    视频地址:https://www.cctalk.com/v/15114923889408 文章 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器.路由中间件.Get 和 Post 形式的请 ...

  8. 《Node.js实战(双色)》作者之一——吴中骅访谈录

  9. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

随机推荐

  1. 03javascript01

    1.javascript语法体系 1)EMCA基础语法(统一) 2)BOM编程(不统一) 3)DOM编程(不统一) 1.1 javascript使用 <!DOCTYPE html> < ...

  2. Educational Codeforces Round 55 (Rated for Div. 2) D. Maximum Diameter Graph (构造图)

    D. Maximum Diameter Graph time limit per test2 seconds memory limit per test256 megabytes inputstand ...

  3. linux c++下遍历文件

    https://blog.csdn.net/u013617144/article/details/44807333

  4. ESP8266-01

    我的模块购买地址  https://buyertrade.taobao.com/trade/detail/tradeSnap.htm?tradeID=460212770243341548&sn ...

  5. UVA 315 :Network (无向图求割顶)

    题目链接 题意:求所给无向图中一共有多少个割顶 用的lrj训练指南P314的模板 #include<bits/stdc++.h> using namespace std; typedef ...

  6. 借用的对vue-cli配置对解析

  7. 第八周作业—N42-虚怀若谷

    一.显示统计占用系统内存最多的进程,并排序 [root@centos7 ~]# ps -eo uid,pid,ppid,tty,c,time,cmd,%mem --sort=-%mem UID PID ...

  8. Navicat 出现的[Err] 1146 - Table 'performance_schema.session_status' doesn't exist已解决

    [Err] 1146 - Table 'performance_schema.session_status' doesn't exist已解决   刚刚接触MySQL,就往数据库添加数据,就遇到这个问 ...

  9. jAVA基础 提高文件复制性能之多线程复制文件

    利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...

  10. cookie、session和会话保持

    1.会话 在程序中,会话跟踪是很重要的事情.理论上,一个已登录用户,在这次登录后进行的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆.例如,用户 A 在 ...