【问题标题】:Example of c++ client and node.js serverc++客户端和node.js服务器示例
【发布时间】:2021-03-02 18:49:52
【问题描述】:

我有一个问题...我正在尝试将用 c++ 编写的客户端连接到用 nodejs 编写的服务器,但我做不到。如何在服务器中接收数据?使用此代码,我收到了客户端连接,但没有收到它发送的数据。我将欣赏一个从 c++ 客户端和 nodejs 服务器发送和接收数据的简单示例。

这是我的 client.cpp

#include <stdio.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <unistd.h> 
#include <string.h> 
#define PORT 8080 
   
int main(int argc, char const *argv[]) 
{ 
    int sock = 0, valread; 
    struct sockaddr_in serv_addr; 
    char *hello = "Hello from client"; 
    char buffer[1024] = {0}; 
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
    { 
        printf("\n Socket creation error \n"); 
        return -1; 
    } 
   
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_port = htons(PORT); 
       
    // Convert IPv4 and IPv6 addresses from text to binary form 
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0)  
    { 
        printf("\nInvalid address/ Address not supported \n"); 
        return -1; 
    } 
   
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) 
    { 
        printf("\nConnection Failed \n"); 
        return -1; 
    } 
    send(sock , hello , strlen(hello) , 0 ); 
    printf("Hello message sent\n"); 
    //valread = read( sock , buffer, 1024); 
    //printf("%s\n",buffer ); 
    return 0; 
} 

这是我的 server.js

const server = require('http').createServer();

const io = require('socket.io')(server, {
  path: '/test',
  serveClient: false,
  // below are engine.IO options
  pingInterval: 10000,
  pingTimeout: 5000,
  cookie: false
});

server.on('connection', function (client) {
    console.log("New connection");
  });

server.on('data', function (client) {
    console.log("New data");
});

server.on('close', () => {
    console.log('Subscriber disconnected.');
});

server.listen(8080);

【问题讨论】:

  • 你不是在调用recv函数来接收send函数调用后的数据
  • 我确定socket.io 有 c/c++ 库,因为这是基于 websockets 的自定义协议,我建议您这样做。如果不是 - 那么可能在节点中使用一些低级套接字实现:nodejs.org/api/net.html#net_class_net_socket

标签: c++ node.js server client unix-socket


【解决方案1】:

您的客户端程序终止的速度快于服务器读取数据的时间(在系统有时间发送输出缓冲区之前套接字已关闭)。在你离开之前先“睡觉”(或任何其他等待的概念),看看会发生什么。

附言你的“发送”的返回值是多少?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2011-12-25
    • 2012-01-05
    相关资源
    最近更新 更多