首页 > 技术文章 > 开始学nodejs——net模块

tzyy 2016-01-12 14:31 原文

net模块的组成部分

详见 http://nodejs.cn/api/net.html
下面整理出了整个net模块的知识结构,和各个事件、方法、属性的用法

net.Server类

net.Socket类

事件

方法

属性

工厂方法

练习代码

 netServer

var net=require("net");

/**
 * 创建server
 */
function t1(){
    var server=net.createServer(function(socket){
        //socket.end("good bye!");
        socket.write("hello,i'm server!");
        console.log("client connected! %j:%j",socket.remoteAddress,socket.remotePort);
        socket.on("data",function(data){
            console.log("recived from client:",data.toString());
        })
        socket.on("close",function(had_error){
            if(!had_error){
                console.log("client closed success! %j:%j",socket.remoteAddress,socket.remotePort);
            }
            else{
                console.log("client close error! %j:%j",socket.remoteAddress,socket.remotePort);
            }
        })
        socket.on("error",function(err){
            console.log("!!!err!!!",err);
        });
        //setTimeout(function(){
        //    socket.end("我结束了","utf8");
        //},3000);
    });
    server.listen({
        port:8889
    },function(){
        var address=server.address();
        console.log(" opened server on address %j ",address);
    });

    var a=1;
}
t1();

netSocket

var net = require("net");

/**
 * 初始化net clientSocket对象,测试发送数据,关闭连接
*/
function t1(autoclose){
    var inteval;
    var socket1=new net.Socket({
        readable:true,
        writable:true,
        allowHalfOpen:true
    });
    socket1.on("data",function(data){
        console.log("recived from server:"+data.toString());
    });
    socket1.on("close",function(){
        console.log(" client closed success ");
    });
    socket1.on("error",function(err){
        console.log(" client error: ",err);
    });
    socket1.connect({
        host:"localhost",
        port:8889
    },function(){
        console.log(" server connected");
        inteval=setInterval(function(){
            socket1.write("hello,i'm client!"+Math.random())
        },3000)
    });
    if(autoclose){
        setTimeout(function(){
            socket1.destroy();
            clearInterval(inteval)
            //socket1.end("我结束了","utf8");
        },3000);
    }
}

/**
 * 通过net.connect创建clientSocket对象
 */
function t2(){
    var client = net.connect({port: 8889},
        function() { //'connect' listener
            console.log('connected to server!!!');
            client.write('world!\r\n');
        });
    client.on('data', function(data) {
        console.log(data.toString());
        //client.end();
    });
    client.on('end', function() {
        console.log('disconnected from server');
    });

}

t1(false);
t1(true);
//t2();
//for(var i=0;i<1000;i++){
//    console.log("连接个数:",i+1);
//    t1(false);
//}

下图为server控制台的截图

 
使用Ctrl+C关闭client,clientsocket意外结束时,会触发error事件,随后触发close事件
 

推荐阅读