c++ - c++客户端和node.js服务器示例
问题描述
我有一个问题...我正在尝试将用 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);
解决方案
您的客户端程序终止的速度快于服务器读取数据的时间(在系统有时间发送输出缓冲区之前套接字已关闭)。在你离开之前先“睡觉”(或任何其他等待的概念),看看会发生什么。
ps 你的“发送”的返回值是多少?
推荐阅读
- android - Github 上的新提交只有几个文件
- swift - 服务应该调用另一个服务还是应该获取自己的数据
- c++ - 使用 arm-none-eabi 进行 Clang 交叉编译
- imagemagick - ImageMagick - 从 Photoshop 文件中删除组
- vue.js - Quasar Framework (Vue):可折叠和鼠标离开
- amazon-web-services - Route 53 + ELB = 不起作用,但似乎配置正确
- docker - 用./configure配置了一个下载的包,如何从centos中彻底删除
- node.js - Microsoft bot 框架 IE11 嵌入问题
- excel - 是否有一个 VBA 字符串来选择曾经有一个空白公式的复制单元格?
- html - 如何使块从新位置继续