无法在Linux上的Node.js域套接字服务器和C域套接字客户端之间进行通信

问题描述 投票:0回答:1

这是Node.js代码:

       net = require('net');
       fs  = require('fs');
       serverSocketFile = '/tmp/_mediaComm';
       if (fs.existsSync(serverSocketFile))
         fs.unlinkSync(serverSocketFile);
       var server = net.createServer((socket) => {
         console.log("Connection received.");
         socket.on('data', (data) => {
            //console.log(...);
         });
         //...
       });   
       server.on('error', (err) => {
         console.log("Error:" + err);
       });
       server.listen(serverSocketFile, () => {
          fs.chmodSync(serverSocketFile, '0777');
       });

我先开始。创建的套接字文件是:

    ls -l /tmp/_mediaComm
    srwxrwxrwx 1 usr1 usr1 0 May 27 16:28 /tmp/_mediaComm

这里是C客户端代码的相关部分

   int retStatus;
   struct sockaddr_un clientUnixSocket;
   struct sockaddr_un serverUnixSocket;
   int fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_NONBLOCK, 0);
   if (fd < 0) {
     perror("Socket create error");
   };
   clientUnixSocket.sun_family = AF_UNIX;
   strcpy(clientUnixSocket.sun_path, "/tmp/_clientComm");
   unlink("/tmp/_clientComm");
   if (bind(fd, (struct sockaddr *)&clientUnixSocket, sizeof(clientUnixSocket)) < 0) {
     perror("Client bind error");
   }
   serverUnixSocket.sun_family = AF_UNIX;
   strcpy(serverUnixSocket.sun_path, "/tmp/_mediaComm");
   printf("Sending data...\n");
   retStatus = sendto(fd, "Hi", 2, 0, (struct sockaddr *) &serverUnixSocket, sizeof(struct sockaddr_un));
     if (retStatus == -1) {
         perror("SENDTO ERROR");
     }
     else {
         printf("Data sent!\n");
     }

我从C程序中收到以下错误:

 Sending data...
 SENDTO ERROR: Protocol wrong type for socket
  1. 我在C代码中缺少什么?另外
  2. 我们如何告诉节点服务器处于DGRAM而非STREAM模式?
c node.js linux sockets unix-socket
1个回答
0
投票

Node.js在DGRAM模式下不支持UNIX域套接字。仅在STREAM模式下!

© www.soinside.com 2019 - 2024. All rights reserved.