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

时间:2016-02-03 08:19:33

标签: 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);
}

// 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的处理器上运行。

1 个答案:

答案 0 :(得分:0)

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

  • connect() 对等方,在这种情况下,您不需要bind()
  • listen()位于端口,accept()连接来自对等端。

哪个是正确的取决于设备。目前你们两个都没做。

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

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