控制字符的 Socket.IO 问题

     2023-02-22     84

关键词:

【中文标题】控制字符的 Socket.IO 问题【英文标题】:Socket.IO issue with control chars 【发布时间】:2011-11-03 15:03:58 【问题描述】:

我正在实现一个使用 websockets 和一个通过 Telnet 访问的控制台的应用程序。通过 websockets 建立的连接与控制台之间存在通信。我遇到了一个奇怪的问题:

如果我在控制台中输入内容时将字符串常量发送到已建立的套接字,它可以正常工作。 如果我发送从控制台范围接收到的字符串,它似乎打开了一个新套接字(不确定),因为在调试日志中我看到了它,并且在浏览器端(websockets)它提醒我有一个新的连接。李> 如果我发送一个本地字符串(而不是从另一个作用域接收的那个),它就会正确发送。 (注释行:client.send(message))

我在这里分享 nodeJS 代码,考虑到这现在是一个测试应用,所以假设只有一个套接字和 websockets 连接:

// Sample based on: http://elegantcode.com/2011/05/04/taking-baby-steps-with-node-js-websockets/
// Changed for sockets.io 6.x => 7.x


var events = require('events');
var eventEmitter = new events.EventEmitter();

var http = require('http');
var socketIO = require('socket.io');
var static = require('node-static');

var port = 2000;

var clientFiles = new static.Server('./client');

var httpServer = http.createServer(
    function(request, response) 
        request.addListener('end', function()  
            clientFiles.serve(request, response);
       );
    )

httpServer.listen(port);
console.log("Server running at port: " + port);

var io = require('socket.io').listen(httpServer);

var webSocket = io.sockets;

webSocket.on('connection', function(client) 
    client.send('Please enter a user name ...');
    var userName;

    eventEmitter.on('someOccurence', function(message) 
        console.log("Received: " + message);
        client.send('Line Received');
        var s = 'popo';
        client.send(s);
        //client.send(message);
    );


    client.on('message', function(message) 
        console.log(message);

        if(!userName) 
            userName = message;
            client.broadcast.send(message + ' has entered the zone.');
            return;
        

        var broadcastMessage = userName + ': ' + message;
        client.broadcast.send(broadcastMessage);
        client.send("Repeated here: " + message);
    );

    client.on('disconnect', function() 
        var broadcastMessage = userName + ' has left the zone.';
        client.broadcast.send(broadcastMessage);
    );
);


var lines = require('lines-adapter');
var net = require('net');

var server = net.createServer(function (socket) 
    socket.write("Welcome to the Server\r\n");

    lines(socket, 'utf8')
    .on("data",
        function(line) 
            console.log("Line received: " + line);
            eventEmitter.emit('someOccurence', line);
        
    )
    .end("end",
        function() 
            console.log("End of Stream");
        
    );
);

server.listen(1337, "127.0.0.1");

更新:我刚刚使用 socket.io 0.8.6 和 nodeJS 0.4.12 进行了测试,没有这个问题。我将把这个问题留在这里以供将来参考。

【问题讨论】:

进一步研究我可以看到该错误位于 socket.io 代码周围,因为如果我使用 nodejs 下的 net 库和两个侦听服务器测试相同的代码,一切正常。目前我不知道我的代码、socket.io 或 nodeJS 中是否存在错误。 更多信息:它似乎与 telnet 控制字符和/或“\n”有关 嗯,我似乎无法复制这个问题。从控制台范围收到的字符串“如果我发送从控制台范围收到的字符串 [...]”是什么意思? 你用的是什么socket.io版本? 我在github上找到的最新的。 【参考方案1】:

在 socket.io v0.8.6 中修复。这个 q 应该被回答/关闭。

【讨论】:

【参考方案2】:

这只是需要在本地动态分配内存的一种情况。当字符串进入时,您应该将字符串的字符串复制到动态分配的相同长度的字符串中。问题解决了。

【讨论】:

JavaScript 中的字符串是不可变的。 我也尝试过这种奇怪的处理方式,但没有用。

socket.io,“访问控制允许来源”错误

】socket.io,“访问控制允许来源”错误【英文标题】:socket.io,\'Access-Control-Allow-Origin\'error【发布时间】:2017-11-2112:57:39【问题描述】:我已经设置了一个带有套接字io的节点服务器,并尝试通过另一台服务器连接到它。然而,不... 查看详情

在 socket.io 中控制来自客户端的心跳超时

】在socket.io中控制来自客户端的心跳超时【英文标题】:Controllingtheheartbeattimeoutfromtheclientinsocket.io【发布时间】:2012-09-3016:21:26【问题描述】:我有移动客户端连接到node.js服务器,通过xhr-polling运行socket.io。我有两种类型的客户... 查看详情

Socket.io - 标头 - 查询字符串 - 安全

】Socket.io-标头-查询字符串-安全【英文标题】:Socket.io-Headers-QueryString-Security【发布时间】:2019-07-2213:43:32【问题描述】:我想在这里介绍几个方面。让我们展开。我在我的一个应用程序中使用了Socket.io。在尝试将JWT用于普通应... 查看详情

反应的socket.io聊天问题

...e-react-app项目,并试图整合一个由sockets.io提供支持的聊天控制台。问题是,当前端正确捕获聊天消息,发送回io服务器,然后发出,前端成功捕获这些消息时,用户之间没有任何信息传递,一切都只是发生在单个浏览器实例上。... 查看详情

带有查询字符串参数的 AndroidAsync socket.io 连接

】带有查询字符串参数的AndroidAsyncsocket.io连接【英文标题】:AndroidAsyncsocket.ioconnectionwithquerystringparameters【发布时间】:2014-03-0111:24:46【问题描述】:几天来,我一直在使用带有Android的socket.io。截至目前,我正在使用Koush的Android... 查看详情

如何在控制器中使用 socket.io

】如何在控制器中使用socket.io【英文标题】:Howtousesocket.ioinacontroller【发布时间】:2022-01-0314:11:49【问题描述】:当用户使用我的应用登录时,我会尝试获取所有用户列表。//examplecodewhichiwantrouter.post(\'/log\',loging)exports.login=(req,re... 查看详情

socket.io 由于数据大小而断开连接

...下面的代码中:客户端应该开始向服务器发送很长的Base64字符串的图像,一个接一个地间隔很近。一旦第一个带有Base64字符串的emit发生,套接字就会断开连接。我尝试使用硬编码的2个字符的字符串,但没有发生这种情况。我认... 查看详情

尝试控制台时收到 401~UNAUTHORIZED。记录我从 socket.io 收到的消息

】尝试控制台时收到401~UNAUTHORIZED。记录我从socket.io收到的消息【英文标题】:Getting401~UNAUTHORIZEDwhentryingtoconsole.logthemessageIhavereceivedfromasocket.io【发布时间】:2017-12-0919:25:56【问题描述】:我正在尝试创建一个仅实时显示比特币价... 查看详情

Node.js + AngularJS + Socket.io:推送的数据在控制器中不可用

】Node.js+AngularJS+Socket.io:推送的数据在控制器中不可用【英文标题】:Node.js+AngularJS+Socket.io:pusheddatanotavailableinthecontroller【发布时间】:2012-11-1413:54:33【问题描述】:我已经设置我的节点服务器以随机间隔推出一些数据,并且数... 查看详情

socket.io 示例:不工作

...图从他们主页上的示例开始弄湿我的脚。但是执行后我在控制台中得到的只是这个调试-提供静态内容/socket.io.js我的服务器端代码是这样的:varapp=require(\'http\').createServer(handler),io 查看详情

带有 OAuth access_token 的 socket.io-client io.connect 查询字符串

】带有OAuthaccess_token的socket.io-clientio.connect查询字符串【英文标题】:socket.io-clientio.connectquerystringwithOAuthaccess_token【发布时间】:2016-05-2901:47:23【问题描述】:过去几天我已经通过堆栈溢出和谷歌搜索了这个问题。我正在尝试连... 查看详情

使用 socket.io 创建房间

...thod但我无法创建房间。如果我单击我在UI上创建的按钮,控制台将记录此错误:AccesstoXMLHttpR 查看详情

unity5 中的 Socket.IO,C# - 如何发出字符串或对象?

】unity5中的Socket.IO,C#-如何发出字符串或对象?【英文标题】:Socket.IOinunity5,C#-howtoemitstringorobject?【发布时间】:2017-10-1420:32:15【问题描述】:我是C#和统一的新手。我正在尝试使用Socket.IO向服务器发送一个简单的字符串:socket.... 查看详情

socket.io:加载资源失败

...node.js。按照socket.io网站上的第一个示例,我在浏览器的控制台中收到以下错误:Failedtoloadresource:theserverrespondedwithastatusof404(NotFound)http 查看详情

解析作为字符串传递的多个 json - Socket.io、NodeJS 和 ExpressJS

】解析作为字符串传递的多个json-Socket.io、NodeJS和ExpressJS【英文标题】:Parsemultiplejsonpassedasstring-Socket.io,NodeJSandExpressJS【发布时间】:2019-05-0722:46:38【问题描述】:我有一个连接到第三方的套接字,我使用websockets接收数据。有时... 查看详情

Heroku 和 Socket.io,400 个错误请求和许多断开连接

...它在Heroku上运行,但是在运行它时遇到了严重的问题。在控制台日志和chrome控制台中,每隔一秒左右就会有一堆断开连接。在c 查看详情

找不到 socket.io.js [重复]

...,当我尝试访问\'/socket.io时出现错误/socket.io.js\'javascript控制台说文件不存在。当我检 查看详情

使用 socket.io 解析 cookie

...确读取节点服务器上由我通过localhost:3000上的浏览​​器控制台设置的cookie,如下所示:document.cookie="tagname=test;secure";document.cookie="hello=1"在我的节点服务器中,我使用 查看详情