繁体   English   中英

节点 net.createServer(),将数据发送回 on('data') 回调的客户端

[英]Node net.createServer(), sending data back to the client oustside of on( 'data' ) callback

所以我在 Electron 中有一个小服务器,使用 net 和这个类:

var net = require('net')

class Server {

    constructor(port) {

        this.Port = port

        var HOST = '127.0.0.1'  // todo: get ip from host name

        this.Server = net.createServer();
        this.Server.listen(port, HOST);

        this.Server.on('connection',  (sock) => {

            console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);

            sock.on('data', function (data) {
                console.log( `client sent data ${data}`)
                sock.write( `Server sends back ${data} to client`)
            });

            sock.on('close', function (data) {
                let index = sockets.findIndex(function (o) {
                    return o.remoteAddress === sock.remoteAddress && o.remotePort === sock.remotePort;
                })
                console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort);
            });
        });

    } // constructor

}

我这样称呼它:

var server = new Server( 3000 )

使用telnet localhost 3000对其进行测试。 这一切都很好用,但它有点与问答相关联,只有在 io('data') 中从客户端接收到数据时才向客户端发送响应。 有没有办法以更随意的方式从类外发送数据。 例如:

var server = new Server( 3000 )
this.Server.write( data )

这似乎有效:

在构造函数中的 this.Server.on('connection') 中:

this.Socket = sock

添加方法:

Send( msg ) {
    if ( !this.Socket ) {
        console.log( "Server.Send(): no client connected" )
    }
    this.Socket.write( msg )
}

并在 sock.on( 'close' ) 中将套接字方法设置回 null:

this.Socket = null

然后:

var server = new Server( 3000 )
server.Send( data )

(需要检查连接)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM