- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从套接字读取二进制命令的服务器程序。发送到套接字的缓冲区需要对其数据进行非常具体的排序。这是来自提供的示例客户端应用程序的一些 C 代码,其中显示了需要发送的数据的顺序和大小。
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef struct JobNodeInfo_s {
u16 jNodeInfoType; /* per END device, per router, whole system */
u8 value[32]; /* mac address / barcode value / Location */
} JobNodeInfo_t;
typedef struct JobHdrFormat_s {
u16 jPreamble;
JobCommandType_t jCmd;
u16 jBatchID; /* for logging */
u16 jSeq;
u16 priority;
u16 option; /* option field could be reserved for future extension */
JobNodeInfo_t jNodeInfo;
u16 jLen;
} JobHdrFormat_t;
JobHdrFormat_s 结构作为空指针传递到套接字:
send(connfd, (void*)jFormat, sizeof(JobHdrFormat_t) + jFormat->jLen , 0);
现在,我需要在 Node.js 中复制此缓冲区。我研究过 Node Buffer 类,但注意到它只支持八位字节。正如您所看到的,大多数内存插槽都是为 16 位整数保留的。 Node.js 是否可以像 C 代码那样按照我需要的方式排列数据?我在这里进行了第一次尝试:
var net = require( 'net' );
var client = new net.Socket();
client.connect( 13929, '192.168.2.2', function() {
var mac_addr = "041511000960",
outgoing_str = "FE9C00020000001100000004"
+ mac_addr
+ "0000",
outgoing_buf = new Buffer( outgoing_str.length, "hex" );
var new_buff_arr = [];
for ( var i = 0, il = outgoing_str.length; i < il; i += 2 ) {
var cmd_substr = "0x" + outgoing_str.substring( i, i + 2 ),
i_cmd_substr = parseInt( cmd_substr );
console.log( "substr: " + cmd_substr + " int: " + i_cmd_substr );
new_buff_arr.push(i_cmd_substr);
}
const buf = new Buffer(new_buff_arr);
client.write( buf ,
function() {
console.log( "data is written" );
}
);
});
client.on('data', function( data ) {
console.log('Received: ' + data.toString( "hex" ));
});
client.on('close', function() {
console.log( 'Connection closed' );
});
或多或少,我尝试将缓冲区写入字符串,循环遍历它,将每两个“字节”写入单个十六进制值,然后将它们转换回数字并将缓冲区写出。如果 Node 只能使用八位字节,这是否可能?如果您需要更多信息,请告诉我。
最佳答案
看看this :
[The] jBinary [is a] library for working with binary data in JavaScript, allows loading data from any source with automatically detected best supported way on current browser or Node.js
然后再看看jBinary library Typesets ...
我没有使用 jBinary 和 Node.js 的经验。但我对这些功能很感兴趣,而且我现在已经找到了这个解决方案。
关于c - Node : How to send 16bit binary information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629935/
我很难理解为什么这段代码无法编译: use std::cell::{Ref, RefCell}; struct St { data: RefCell } impl St { pub f
我从Richard Blum的一本书《 C#网络编程》中读到有关套接字的信息。以下摘录指出,不保证Send()方法可以发送所有传递给它的数据。 byte[] data = new byte[1024]
我有以下程序,它必须一次读取 1MB 的文件,将其发送到服务器(每次总是 1MB)并返回哈希码: #include #include #include #include #include #
代码在底部。 第 207 行的 send() 命令本身可以正常工作。但是,当我在第 218 行添加 send() 命令时,第一个命令失败 - 给出错误“地址错误”。我已经确认第二个 send() 命令
标记包含 !Send 的类型背后的原因是什么?字段(如 Rc 或 NonNull )与 Send特征?例如,标准库的 LinkedList 以这种方式工作:它包含 Option>字段并实现 Send特
我是新手,我正在尝试学习 goroutines 中信号函数的一些基本用法。我在 go 中有一个无限循环。通过这个 for 循环,我通过 channel 将值传递给 goroutine。 我也有一个阈值
如果数据是从另一台计算机(首先)“发送”的,我如何设置我的套接字例程以“发送”(首先)或(切换)“接收”? 谢谢 通用代码: -(void) TcpClient{ char buffer[12
这个问题已经有答案了: Java multiple file transfer over socket (3 个回答) 已关闭 4 年前。 我正在使用 Java Socket 将文件发送到服务器,然后
根据以下示例中的类型,Go编译器似乎将执行两个完全不同的语义操作: chanA <-chanB 如果chanA是类型(chan chan <-字符串),则此操作会将本身类型chanB的类型(chan
我正在尝试在 VBA 中使用 WinSock2 从本地主机 TCP 流发送(以及稍后接收)数据。 目前,我主要尝试从此处复制客户端示例,https://msdn.microsoft.com/en-us
我在我的 Mac OS X Yosemite 控制台中看到了这个: AppleEvents: Send port for process has no send right, port=( port:
我知道Clojure的“代理”是ref,带有“操作”的添加工作队列。 Action 是使用ref的值在第一个位置调用的函数,可以将其传递给其他参数。操作将返回ref的新值。因此,“代理”是一种计算re
我无法将任何对象或数组传递给 IPCRenderer。 通过 ipcs 传递对象或数组时出现错误,我什至尝试通过使用 JSON.stringify 转换为字符串来发送,但它会将其转换为空对象字符串。
我正在使用unix scoket进行数据传输(SOCK_STREAM模式) 我需要发送超过100k个字符的字符串。首先,我发送一个字符串的长度-它是sizeof(int)个字节。 length = s
Clojure API 将这两个函数描述为: (send a f & args) - Dispatch an action to an agent. Returns the agent immedia
def send_Button(): try: myMsg = "ME: " + text.get() msg = text.get() con
Ruby 对象都有一个“发送”方法,但是,我正在尝试使用一个 Java 库 ( netty-tools ),它的一个接口(interface)上有一个“发送”方法。 用法应该是 java_obj.se
Feb 8, 2011 11:56:49 AM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPC onnection post SEVE
来自 man 2 send: MSG_MORE (since Linux 2.4.4) (…) Since Linux 2.6, this flag is also supported for UDP
我的网页中可以有一个按钮,用于将预填充的消息发送到特定号码吗? 我正在尝试 intent://send/+391234567890#Intent;scheme=smsto;package=com.wh
我是一名优秀的程序员,十分优秀!