【问题标题】:Reading Data from TCP port of embedded device从嵌入式设备的 TCP 端口读取数据
【发布时间】:2016-02-06 06:15:26
【问题描述】:

我想从嵌入式设备的特定 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);

我不必担心服务器进程。我很难理解如何仅针对嵌入式设备执行此操作,这意味着只有我的嵌入式设备从其各自的 tcp 端口读取数据,然后将其发送到服务器。我的代码将在内置 linux 的板上的处理器上运行。

【问题讨论】:

  • 显示你的代码并解释它做什么和不做什么。如果您没有任何代码,请先阅读教程。

标签: sockets networking ip embedded-linux tcp-ip


【解决方案1】:

您正在尝试从未连接的端口读取数据。它会失败。您需要:

  • connect() 对等体,在这种情况下你不需要bind(),或者
  • listen() 在端口和accept() 一个连接来自对等体。

哪个正确取决于设备。目前你什么都不做。

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

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

【讨论】:

  • 我希望我的主板充当客户端(它读取来自其 tcp 端口的数据,然后将其发送到服务器)。我只有在理解如何从设备本身读取数据方面遇到问题。由于代码将在开发后在处理器上运行。因此,只需假设我的嵌入式设备在一块板上连接了多个传感器并在 tcp 端口 6000 上发送数据,我需要读取该数据并稍后连接到服务器。您提到的部分是客户端服务器模型的通用部分,我确实理解。
  • 你可能明白,但你还没有实现。您正在从未连接的套接字读取。它会失败。如果板子是客户端,它必须连接到服务器。但我认为你的描述中遗漏了一些东西。在我看来,您的代码也是主板的 TCP 服务器,因此您必须接受来自主板的连接。否则它是董事会的客户,您必须连接到它。无论如何,你必须做一个或另一个。
  • 是的,你是对的。所以,我现在正在考虑这种情况:我将在板上运行一个客户端程序以及服务器程序。服务器程序将绑定到板的 ip 端口号为 6000。我的客户端程序将从服务器接收数据。我面临的问题是如何将端口 6000 上接收到的数据发送到另一台服务器?我认为在这种情况下,两个客户端之间需要一个共享队列。我说的对吗?
  • 我想你已经把它全部背对了。该板应该是一个服务器,它将向连接到它的任何人发送数据。如果没有人连接,则不发送。这也使配置变得更简单:您不必告诉开发板要连接什么,只需告诉它自己的端口号。
  • 你是对的,但作为客户端,我应该从板子接收数据并将其发送到另一台服务器。因此,该场景就像作为客户端从一台服务器接收数据并将该数据传递到另一台服务器。这件事有什么通用的解决方案吗?我正在考虑共享队列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多