使用Netcat-C语言向我的微控制器发送消息

问题描述 投票:2回答:2

我进行了很多搜索,但无法弄清楚如何解决我的问题。我有一个esp8266 12E配置为通过TCP / IP接收消息,并在发送的消息具有正确密码的情况下激活门。我有以下代码:

system ("netcat 192.168.4.1 555");

在终端netcat上执行后,打开了,但是我不知道如何让我的程序自动写密码。尝试过:

system ("netcat 192.168.4.1 555");
printf("key");

调用netcat命令后无法写东西。在我的程序发送密钥后,需要关闭netcat,该怎么做?

我希望我能用英语解释自己,很高兴获得帮助来解决这个简单的问题。

*我正在使用linux进行编码,我的应用程序将在树莓派上运行。

c linux tcp esp8266 netcat
2个回答
1
投票

popen是你的朋友。它类似于system,但返回一个“文件指针”(以逗号分隔!),您可以在其中读/写。

使用can be found online的几个示例。

未经测试的伪示例

fp = popen("nc 192.168.4.1 555", "w");
if (fp == NULL) {
   /* Handle error */
   printf("Couldn't spawn nc\n");
   exit(1);
}
fprintf(fp, "key"); // write to netcat's STDIN
pclose(fp);

或者,您可以打开网络套接字并直接自己直接读写网络:即http://www.cs.tau.ac.il/~eddiea/samples/IOMultiplexing/TCP-client.c.html


0
投票

感谢@wally回答和@Stom评论。两者都让我了解了该功能的工作原理,因此能够解决我的问题。让我的应用与微控制器保持连接时,我面临着太多的问题。所以现在我更喜欢只发送消息并终止netcat。

当我运行下面的代码时,我只能发送一条消息,并且需要手动重新启动应用程序。但这是达成解决方案的巨大帮助。

fp = popen("nc 192.168.4.1 555", "w");
if (fp == NULL) {
   /* Handle error */
   printf("Couldn't spawn nc\n");
   exit(1);
}
fprintf(fp, "key"); // write to netcat's STDIN
pclose(fp);

当我单击“打开门”按钮时,将调用以下代码。

FILE *fp;
  int ch;
  char txt[20];
  int value;
  char comando[] = "";
  int len=0;
  fp = fopen("text.txt", "r");
  if(fp){
    do{
    ch=fgetc(fp);
    txt[len]=ch;
    len++;
  }while(ch !=EOF && ch != '\n');
  fclose(fp);
}
  value = atoi(txt);
  sprintf(comando, "echo %d | timeout 3 nc 192.168.4.1 555",value);
  system(comando);

带有密码的文件已打开,内容存储在变量中,并使用netcat发送。

添加“超时3” netcat等待3秒,然后关闭连接。它允许我再次单击该按钮,然后关闭或打开门多少次。

echo %d | timeout 3 nc 192.168.4.1 555

我需要将“ char txt”的内容复制到“ int值”,因为在终端上不是写密码,而是在写“ cho cho”。

© www.soinside.com 2019 - 2024. All rights reserved.