Sockets 从嵌入式设备的TCP端口读取数据

Sockets 从嵌入式设备的TCP端口读取数据,sockets,networking,ip,embedded-linux,tcp-ip,Sockets,Networking,Ip,Embedded Linux,Tcp Ip,我想从嵌入式设备的特定TCP端口读取数据,然后将其发送到服务器。因此,我的整个设备都有一个传感器连接到电路板上,该传感器在TCP端口6000上发送一些数据,例如。我的代码看起来像 // create socket int sockrd = socket(AF_INET, SOCK_STREAM,0); if(sockrd < 0) { std::cout<<"Can't create socket\n"<<std::endl; exit(1); }

我想从嵌入式设备的特定TCP端口读取数据,然后将其发送到服务器。因此,我的整个设备都有一个传感器连接到电路板上,该传感器在TCP端口6000上发送一些数据,例如。我的代码看起来像

// create socket
int sockrd = socket(AF_INET, SOCK_STREAM,0);

if(sockrd < 0)
{
    std::cout<<"Can't create socket\n"<<std::endl;
    exit(1);
}

// Name and bind socket
struct sockaddr_in addressrd;
addressrd.sin_family = AF_INET;
addressrd.sin_addr.s_addr = inet_addr("127.0.0.1");//Provide ip of the board
addressrd.sin_port=htons(6000); // TCP port of the board

bind(sockrd,(struct sockaddr*)&addressrd, sizeof(addressrd));

if(bind < 0)
{
    std::cout<<"Can't bind properly\n"<<std::endl;
}

// declare a buffer to read from the tcp port of the device
char buffer[1024];
read(sockrd,&buffer,sizeof(buffer));
close(sockrd);
//创建套接字
int-sockrd=socket(AF_-INET,SOCK_-STREAM,0);
if(sockrd<0)
{

std::cout您正在尝试从未连接的端口读取。它将失败。您需要:

  • connect()
    到对等机,在这种情况下,您不需要使用
    bind()
    ,或者
  • listen()
    在端口和
    accept()
    来自对等方的连接
哪个是正确的取决于设备。目前你两个都不做

当前的
bind()
调用绑定到127.0.0.1,将阻止与外部的所有连接,如果您是客户端,则应删除该调用;如果您是服务器,则应更改为绑定到INADDR\U ANY


您还需要在
read()
调用中添加错误检查,并修复其他错误检查,以便它们调用
peror()
或朋友,这样你就能得到实际的故障模式,而不是你自己设计的无用信息。

展示你的代码,并解释它的功能和不功能。如果你没有任何代码,从阅读教程开始。我希望我的板充当客户端(它读取tcp端口上的数据,然后将数据发送到服务器)。我只在理解如何从设备本身读取数据方面存在问题。因为开发后代码将在处理器上运行。因此,假设我的嵌入式设备在一块板上连接了多个传感器,并在tcp端口6000上发送数据,我需要读取该数据,然后den连接到服务器。您提到的部分是generic是客户机-服务器模型的一员,我理解。你可能理解它,但你还没有实现它。你正在从一个未连接的套接字读取数据。它将失败。如果电路板是客户机,它必须连接到服务器。但我想你在描述中遗漏了一些东西。在我看来,你的代码也是电路板的TCP服务器,所以你必须接受来自电路板的连接。否则,它是电路板的客户端,你必须连接到它。不管是什么情况,你必须做一个或另一个。是的,你是对的。所以,我现在正在考虑这个场景:我将在电路板上运行客户端程序和服务器程序。服务器程序我将绑定到board的ip,端口号为6000。我的客户端程序将从服务器接收数据。我面临的问题是如何将端口6000上接收到的数据发送到另一台服务器?我想在这种情况下,我需要两个客户端之间的共享队列。我说得对吗?我想您将所有数据都放在了后面。board应该是一个能够将数据发送给任何连接到它的人。如果没有人连接,则不发送。这也使配置更简单:您不必告诉线路板要连接到什么,只需告诉线路板自己的端口号。您是对的,但作为客户端,我应该从线路板接收数据并将其发送到另一台服务器。因此,该场景就像从一台服务器接收数据一样并将该数据传递给另一台服务器。有什么通用的解决方案吗?我考虑的是共享队列。