使用node-ipc和unix套接字在NodeJS和C之间进行通信

我想在Unix套接字上使用node-ipc在NodeJS和C程序之间进行通信,根据该主页,这是最快的选择。(它们将在同一台计算机上)。该软件包声称它可以与C程序通信。(我必须进行健全性检查)。

问题在于示例没有提供示例C代码,而且我几乎不知道如何让他们交谈。

谁能指出我一个C代码示例以匹配那些客户机/服务器示例?例如,我将如何改编本教程以在C中使用unix管道(假设我还没有完全脱离轨道?!也许我想要的是“

domain

sockets

”?)这对我来说都没有任何意义,我缺少一些关键的东西。

回答:

最后,我将其与下面的代码一起使用。您可以免费获得它!

#include <stdio.h>

#include <unistd.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <stdlib.h>

char *socket_path = "/tmp/icp-test";

int main(int argc, char *argv[]) {

struct sockaddr_un addr;

char buf[100];

int fd,cl,rc;

if (argc > 1) socket_path=argv[1];

if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {

perror("socket error");

exit(-1);

}

memset(&addr, 0, sizeof(addr));

addr.sun_family = AF_UNIX;

if (*socket_path == '\0') {

*addr.sun_path = '\0';

strncpy(addr.sun_path+1, socket_path+1, sizeof(addr.sun_path)-2);

} else {

strncpy(addr.sun_path, socket_path, sizeof(addr.sun_path)-1);

unlink(socket_path);

}

if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {

perror("bind error");

exit(-1);

}

if (listen(fd, 5) == -1) {

perror("listen error");

exit(-1);

}

while (1) {

if ( (cl = accept(fd, NULL, NULL)) == -1) {

perror("accept error");

continue;

}

while ( (rc=read(cl,buf,sizeof(buf))) > 0) {

printf("read %u bytes: %.*s\n", rc, rc, buf);

}

if (rc == -1) {

perror("read");

exit(-1);

}

else if (rc == 0) {

printf("EOF\n");

close(cl);

}

}

return 0;

}

 var ipc=require('node-ipc');

var socketId = 'icp-test';

ipc.config.id = 'hello';

ipc.config.socketRoot = '/tmp/';

ipc.config.appspace = '';

ipc.config.retry= 1500;

ipc.connectTo(

socketId,

function(){

ipc.of[socketId].on(

'connect',

function(){

console.log("Connected!!");

ipc.log('## connected to world ##'.rainbow, ipc.config.delay);

ipc.of[socketId].emit(

'message', //any event or message type your server listens for

'hello'

)

}

);

ipc.of[socketId].on(

'disconnect',

function(){

console.log("Disconnected!!");

ipc.log('disconnected from world'.notice);

}

);

ipc.of[socketId].on(

'message', //any event or message type your server listens for

function(data){

console.log("Got a message!!");

ipc.log('got a message from world : '.debug, data);

}

);

}

);

附带说明一下,我已经意识到,如果您只想通过带有C的unix套接字在NodeJS之间进行通信,则NodeJS实际上已经带有一个已经完成该任务的模块。事实证明,这是node-ipc引擎盖下使用的东西。因此,仅使用NodeJS的net包可能会更容易。前面的问题指出了如何在NodeJS中执行IPC。只需将其与上面的C代码结合即可。

以上是 使用node-ipc和unix套接字在NodeJS和C之间进行通信 的全部内容, 来源链接: utcz.com/qa/428561.html

回到顶部