- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在阅读《Node.js in Action》一书,并尝试其中的示例。其中一个示例从“net”创建一个 channel ,然后为所有连接创建一个 channel 并向其他连接/ channel 广播消息。
var events = require('events');
var net = require('net');
var channel = new events.EventEmitter();
channel.clients = {};
channel.subscriptions = {};
channel.on('join', function (id, client) {
this.clients[id] = client;
this.subscriptions[id] = function (senderId, message) {
if (id !== senderId) {
this.clients[id].write(message);
}
};
this.on('broadcast', this.subscriptions[id]);
});
channel.on('leave', function(id) {
channel.removeListener('broadcast', this.subscriptions[id]);
channel.emit('broadcast', id, id + " has left the chat. \n");
});
channel.on('shutdown', function() {
channel.emit('broadcast', '', "Chat has shut down.!\n");
channel.removeAllListeners('broadcast');
});
var server = net.createServer(function (client) {
var id = client.remoteAddress + ':' + client.remotePort;
//client.on('connect', function () {
channel.emit('join', id, client);
//});
client.on('data', function (data) {
data = data.toString();
if(data == "shutdown\r\n") {
channel.emit('shutdown');
}
channel.emit('broadcast', id, data);
});
client.on('close', function() {
channel.emit('leave', id);
});
});
server.listen(8888);
现在,如果您查看以下代码:
client.on('data', function (data) {
data = data.toString();
if(data == "shutdown\r\n") {
channel.emit('shutdown');
}
channel.emit('broadcast', id, data);
});
当您使用以下命令使用 telnet 连接到此服务器时,它会从命令行读取数据:
telnet 127.0.0.1 8888
您可以从多个终端/shell 连接到在本地主机端口 8888 上运行的该服务器,但是当涉及到从 telnet 读取输入流时,它会在用户输入时立即读取数据。因此,如果我想检测带有回车符和换行符(\r\n)的字符串“shutdown”,我无法做到这一点,因为每次击键都会调用回调函数,所以你得到的是“s”“h” “u”“t”...“n”作为单个字符而不是字符串缓冲区。
我在API中看到有流动模式和暂停模式,但不知道如何在这里实现。
我在书中遇到了另一个例子,我通过将其与字符代码进行比较并手动缓冲直到遇到回车键来修复它,但我期待更好的解决方案,最好是如果node.js有东西提供。
var net = require('net');
var line = '';
var server = net.createServer(function(socket) {
socket.on('data', function(data) {
if(data.toString().charCodeAt(0) != 13){
line += data.toString();
} else {
//console.log('OO');
socket.write(">>");
socket.write(line);
socket.write("\r\n");
line = '';
}
});
socket.once('data', function(data) {
socket.write("Hey first time I always stay little reluctant..! Lolz!");
})
});
server.listen(88);
上面的代码是我在另一个示例中使用的修复程序,我遇到了类似的问题,但我想知道修复此问题的标准方法。
最佳答案
我刚刚尝试了原始代码,它在我的 Mac 上按预期工作。正如我怀疑的那样,您的 telnet 客户端已禁用 LINEMODE
并设置为一次字符
。
在 LINEMODE
中,telnet 仅在按 Enter 键时发送您键入的内容,但禁用它后,每次击键都会立即发送。
因此,该问题与 Node.js 或您的代码无关,而是与 telnet 客户端有关。
您可以使用模式线
和模式字符
在两个选项之间切换。
关于node.js - 从输入流 CLI 读取数据 - NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507590/
我在全局范围内安装了最新的 angular-cli,并且我的项目正在成功构建。 在阅读另一个问题的建议解决方案时,(https://github.com/angular/angular-cli/iss
根据official docs关于 .angular-cli.json 配置文件,仅支持 main、test、polyfills 作为 webpack 入口文件。 如何通过定义 .angular-cl
我想在s3存储桶中搜索文件名abc.zip,并且有将近60个存储桶,每个存储桶都有2到3个级别的子目录或文件夹。我尝试使用AWS CLI命令执行搜索,以下是我尝试过的命令,但即使文件存在于存储桶中,也
我正在尝试在 C++/CLI 中查找赋值运算符和复制构造函数的示例。我在 Google 上花了很多时间,但令人惊讶的是我找不到一个看起来很常见的例子。 最佳答案 .NET 语义没有复制构造函数或赋值运
我需要获取另一个窗口的句柄。 这是它的代码: private: System::Void btn_find_Click(System::Object^ sender, System::EventAr
有点好奇实际上有多少人使用 C++/CLI?那么有多少人在使用它呢?人们是否只在托管环境下寻找程序员的特定工作?围绕 c++/cli 的社区有多大?从我目前看到的情况来看,有不少语法变化,作为 C++
我正在阅读一些 C++/CLI Material ,并且遇到了文字字段的概念: literal int inchesPerFoot = 12; 这是否比 const 更可取,因为 const FIEL
通过 npm install -g angular-cli@latest 安装 Angular CLI (angular-cli@1.0.0-beta.16) 失败,出现以下错误 npm-debug.
我正在尝试在我的 Ember CLI 应用程序中配置适配器以根据环境使用不同的主机。在开发中,我希望它是默认的当前主机(让我通过 --proxy 选项自定义它,但在生产中我知道它将是 http://s
我最近开始使用 Angular/CLI 工具,我在执行文件时遇到了一个问题,那就是我运行时 ng serve 那么这个命令可以帮助我们在源文件中进行任何更改时自动重新加载站点,但在我的系统中它没有发生
是否有推荐的方法通过 c++ cli 包装 native c++ 库? 最佳答案 不确定是否一种尺寸适合所有人,但是,是的,这很大程度上是一个机械过程。您的 ref 类包装器应该声明一个私有(priv
我有一个关于为要在 C# 中使用的 native C++ 类创建 C++ CLI 包装器的问题。 这是一个示例代码: #include "stdafx.h" #pragma once using na
下面的代码打印 0 和 3。这是代码生成错误吗?我在 .NET 4.0 下使用 Visual Studio 2012 Update 3 RC 运行它 #include "stdafx.h" using
它是如何工作的?它是否有不同的部分 - 有些方法是托管的,有些是非托管的,它是否将每个方法都转换为托管的,试图保持所有东西都处于托管状态并在必须时进行互操作调用? 最佳答案 三种不同的compiler
如果我没记错的话,函数必须是 CLR 世界中类的成员,而全局函数在 C++/CLI 中是可能的。这是否意味着这些全局函数是某种隐藏的“全局”类的一部分?如果是这样,出于反射目的,人们将如何获取其类型?
如何在 Angular 中重建我的项目。我首先使用 ng build 构建它,但无法再次执行该命令,因为它不会让我更改文件夹。 我收到此错误消息: EPERM:不允许操作,lstat 是否有另一个命令
我遇到了两个相互引用的类的问题。我曾尝试使用接口(interface)来解决问题,但遇到了其他问题,例如类重新定义。我只是不确定如何正确执行此操作。 这是我正在做的事情的一个例子。注意:我已经去掉了所
我是 React.js 的新手,我正在尝试从 tutorialspoint 上的教程中学习但我遇到了错误。这是我执行 npm start 命令时控制台上的错误: C:\Users\HP\Desktop
我正在尝试将我的 angular cli 和 angular core 从 12 升级到 13,但看起来存在对等依赖性问题。有人遇到过这个问题吗? npx @angular/cli@13 update
我正在我的 ubuntu 上安装 influxdb_2.0.9,我按照这里的说明操作: https://docs.influxdata.com/influxdb/v2.0/install/?t=Lin
我是一名优秀的程序员,十分优秀!