2016-06-21 35 views
3

我使用tcp传输数据。服务器代码由C编写,客户端代码由nodejs编写。 当我发送一个缓冲区时,客户端有时会接收到这个缓冲区的两部分,console.log函数会触发两次,但有时它会工作正常。 以下是nodejs代码和C代码。 的NodeJS代码:nodejs从C接收到的缓冲区分为两部分

var client = new net.Socket(); 
client.on('data', function(data) { 
    console.log('data:', data) 
}); 

的C代码:

send(socket_file, buffer, strlen(buffer),0) 
+0

这就是流在Node中的工作方式:它们可能会触发多个“数据”事件(+各种其他事件)。如果您需要汇总服务器发送的整个消息,则可能必须进行一些内部管理。 – robertklep

+0

@robertklep非常感谢! – fiona

回答

2

这是典型的TCP,它是一种(相对于面向分组的像UDP)面向流的协议毕竟。

不能保证一个写入网络等于一个读取另一端,多个写入可以一起传送,并且单个写入可以分开。

您必须添加应用级别的消息协议。