0

客户:

var iosocket = io.connect();
iosocket.on('connect', function () {
    iosocket.on('message', function(message) {
    console.log(message)
    });
});

$('#input').keypress(function(event) {
    if(event.which == 13) {
        event.preventDefault();
        iosocket.send($('#input').val());
    }
});

服务器:(忽略需要的部分)

var socket = require('socket.io');
conn = function (socket) {
    console.log("connnect");
    socket.on('disconnect', function (socket) {
    console.log("disconnect");
    });  

socket.on('message', function (data) {
    var socket1 = new net.Socket();
    socket1.connect (PORT, HOST, function() {
    socket1.write(data);
    socket1.end();
    });

    socket1.on('data', function(data) {
    socket.broadcast.emit('message', data);
    socket.emit('message',data);
    });

    socket1.on('error', function(exception){
    console.log('Exception:');
    console.log(exception);
    });

    socket1.on('drain', function() {
    console.log("socket1 drain!");
    });

    socket1.on('timeout', function() {
    console.log("socket1 timeout!");
    });

    socket1.on('close', function() {
    console.log('Socket1 closed');
    });
});
}
var io = socket.listen(server, { log: false });
io.sockets.on('connection', conn );

问题1(已解决但需要反馈):我在客户端收到的响应(mkessage 变量)是十六进制数组格式,我尝试了 setencoding 和 tostring 方法,但没有解决问题。以下代码将十六进制数组转换为可读字符串。

byte = '';
for (var i=0; i < data.length; i++) {
byte += String.fromCharCode( parseInt(data[i], 16).toString(16) );
}

问题 2:每次都会创建 tcp 套接字 socket1 并且需要花费大量时间来执行此操作。如何创建和使用 socket1 以使其在每次写入后不会关闭?
在 PORT HOST 监听的其他人的状态是否强制它关闭?

4

1 回答 1

2

您是否尝试过明确设置套接字的编码?

socket.on('message', function (msg) {
    var socket1 = new net.Socket();
    socket1.setEncoding('utf8'); //< explicitly request utf8
    socket1.connect (PORT, HOST, function() {
        socket1.write(msg);
        socket1.end();
    });

有关更多详细信息,请参阅NodeJS 文档

如果这没有帮助,您能否分享在 HOST:PORT 处监听的 TCP 服务器的代码(参见socket1初始化)?

编辑

正如下面评论中提到的:除非您在套接字上调用 setEncoding(),否则“数据”回调将接收 Buffer 对象。您应该将其转换为 String 以进行广播。

socket1.on('data', function(data) {
    socket.broadcast.emit('message', data.toString());
});
于 2013-03-04T13:13:22.957 回答