Ich habe es am Ende mit dem Code unten arbeiten. Du kannst es kostenlos haben!
server.c
#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;
}
Client.js:
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);
}
);
}
);
Auf einer Seite zur Kenntnis, habe ich erkannt, dass, wenn Sie wollen einfach nur zwischen NodeJS kommunizieren über Unix-Sockets mit C kommt NodeJS eigentlich mit a module that does that already. Was sich herausstellt, ist, was node-ipc
unter der Haube verwendet. Es könnte also einfacher sein, stattdessen das net
-Paket von NodeJS zu verwenden. This previous question points out how to do IPC in NodeJS. Kombinieren Sie das einfach mit dem obigen C-Code.
Versuchen Sie, die Programme in beide Richtungen zu kommunizieren? Ist das ein kommerzielles Projekt? Würdest du für Hilfe bezahlen? –
Ja, beide Richtungen. Hilfe zu zahlen ist nicht wirklich eine Option, ich brauche nur einen Anstoß in die richtige Richtung. Ich würde ZeroMQ verwenden, aber es scheint wie totaler Overkill – Jodes
Wenn es auf einem POSIX-System ist, ist es eine sehr einfache Aufgabe in der Tat. Leider kann ich dir nicht umsonst helfen oder hier antworten, da ich denke, dass du mehr als nur Hilfe brauchst. Unix Domain Sockets ist der Weg zu gehen, und ich bin mir sicher, wenn Sie es richtig googeln finden Sie viele Beispiele mit C-Code enthalten. Und es ist in der Tat eine sehr einfache Sache, genau wie eine normale Steckdose, aber mit einer anderen Adresse und einem anderen Typ. –