gpt4 book ai didi

javascript - 套接字获取文本字符串作为十六进制数组,多个套接字在彼此的事件中调用

转载 作者:行者123 更新时间:2023-12-02 18:57:20 25 4
gpt4 key购买 nike

客户端:

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 上监听的其他人的状态是否会强制其关闭?

最佳答案

您是否尝试显式设置套接字的编码?

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 documentation了解更多详情。

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

编辑

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

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

关于javascript - 套接字获取文本字符串作为十六进制数组,多个套接字在彼此的事件中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com