从C客户端向Node.js服务器接收和发送消息。

4

我已经用C语言编写了一个TCP客户端,现在想使用Node.js编写服务器端,以便于在现有应用程序中简单集成。

在我的C代码中,我是通过以下方式接收和发送消息的:

numBytes = send( sock, &timeStamp, sizeof( timeStamp ), 0 );
if( numBytes < 0 )
    DieWithSystemMessage( "send( ) failed" );

在了解了nodejs的"net"和"socket.io"包之后,我还没有找到使其正常工作的方法...如果这很简单,那么请原谅,因为这是我第一次使用nodejs。如果您有一些类似的博客或github链接,我很乐意查看,谢谢!!!

3个回答

2

Node.JS非常适用于这样的应用程序(一个月前我开始了完全相同的项目,选择了Node.JS后我没有任何后悔)。这里是一个Node.JS服务器的示例代码:

const port = 46500;
var net = require('net');
var server = net.createServer(function(connection) {
    console.log('client connected');

    connection.on('close', function (){
        console.log('client disconnected');
     });

    connection.on('data', function (data) {
        data = data.toString();
        console.log('client sended the folowing string:'+data);
        connection.write("Response");
        console.log('Sended responst to client');
        connection.end();
        console.log('Disconnected the client.');
   });

});


server.listen(port, function () {
    console.log('server is listening');
}); 

我看到你在另一篇帖子中的评论,我无法回复(因为声望不到50),但你可以在 c 代码中硬编码 Node.JS 服务器的 IP 地址(但确保当服务器 IP 发生更改时有备选方案),或者在 c 应用程序中实现 DNS 客户端,如果服务器有域名。


1

您需要使用net模块,因此简单的TCP监听器应该如下所示:

const
   port = 1234,
   net = require('net');
server = net.createServer(function(connection) {
            connection.write("Welcome to my server"); });
server.listen(port, function() { 
            console.log("Listening..."); });

请参阅 Node.js net API 以获取更多详细信息。

基本上,由于其异步特性,node 使用回调函数进行操作。如果您想要在套接字上为“message”事件注册回调函数,可以像这样操作:

server.on('data', function(data) { 
    console.log('Received data');
    /* Do manipulations on the inbound data */
});

因此,在这里您定义了一个回调函数来在“data”事件上执行,因此每当您在套接字上接收数据时,将执行on()调用中定义的匿名函数。


好的,那么当我从C发送数据时,如何在nodejs的部分操作该数据?服务器使用什么IP地址? - Javi9207
添加了一种简单的方式来访问入站套接字数据。 - NadavL

0

你可以使用 argv 来传递 IP,或者你可以使用十六进制编辑器(如 Hxd)进行修改。


@EricAya,你可以更加礼貌一些。如果你认为答案更像是评论,你可以直接给答案点个踩。 - MIRMIX
@EricAya 好的,我在达到50声望后将删除此消息。 - Et7f3XIV
1
EricAya对我来说已经足够礼貌了。@MIRMIX 当答案格式错误、存在安全风险或包含错误信息时,我们会进行投票反对。 - Et7f3XIV
好了,各位。冷静点。试着享受我们所提供的环境吧。 :) - MIRMIX
@EricAya,你可能是对的。对于任何指责我感到抱歉。我并不是要对你们中的任何人恶意攻击。 - MIRMIX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接