[问答]为实现Hi3861和ESP-01s(stm32)的通信,考虑在Hi3861上建立一个TCPserver,代码无法实现功能,求指教。

阅读量0
0
1
  1. #include <stdio.h>

  2. #include <unistd.h>

  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"

  5. #include <unistd.h>
  6. #include "hi_wifi_api.h"
  7. //#include "wifi_sta.h"
  8. #include "lwip/ip_addr.h"
  9. #include "lwip/netifapi.h"

  10. #include "lwip/sockets.h"



  11. #define SERVER_PORT_TCP                        6666
  12. #define TCP_BACKLOG 10


  13. /* 在sock_fd 进行监听,在 new_fd 接收新的链接 */
  14. int sock_fd, new_fd;

  15. char recvbuf[512];
  16. char *buf = "hello! I'm server!";

  17. int tcp_demo(void)
  18. {

  19.         /* 自己的地址信息 */
  20.         struct sockaddr_in my_addr;
  21.         /*        连接者的地址信息*/
  22.         struct sockaddr_in their_addr;
  23.         int sin_size;

  24.         struct sockaddr_in *cli_addr;

  25.     printf("%s %d rn", __FILE__, __LINE__);

  26.     /* 1 、创建socket  */
  27.         if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  28.         {
  29.         printf("%s %d rn", __FILE__, __LINE__);
  30.                 perror("socket is errorrn");
  31.                 exit(1);
  32.         }

  33.     /* 主机字节顺序 */
  34.         /* 协议 */
  35.         my_addr.sin_family = AF_INET;
  36.         my_addr.sin_port = htons(6666);
  37.         /* 当前IP 地址写入 */
  38.         my_addr.sin_addr.s_addr = INADDR_ANY;

  39.         /* 将结构体其余的都清零 */
  40.         bzero(&(my_addr.sin_zero), 8);

  41.     printf("%s %d rn", __FILE__, __LINE__);
  42.         /* bind 绑定*/
  43.         if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
  44.         {
  45.         printf("%s %d rn", __FILE__, __LINE__);
  46.                 perror("bind is errorrn");
  47.                 exit(1);
  48.         }

  49.     printf("%s %d rn", __FILE__, __LINE__);
  50.         /* 开始监听 */
  51.         if(listen(sock_fd, TCP_BACKLOG) == -1)
  52.         {
  53.                 perror("listen is errorrn");
  54.                 exit(1);
  55.         }

  56.     printf("%s %d rn", __FILE__, __LINE__);
  57.         printf("start acceptn");

  58.     /* accept() 循环 */
  59.         while(1)
  60.         {
  61.                 sin_size = sizeof(struct sockaddr_in);

  62.         printf("%s %d rn", __FILE__, __LINE__);
  63.                 if((new_fd = accept(sock_fd, (struct sockaddr *)&their_addr, (socklen_t *)&sin_size)) == -1)
  64.                 {
  65.                         perror("accept");
  66.                         continue;
  67.                 }

  68.                 cli_addr = malloc(sizeof(struct sockaddr));

  69.                 printf("accept addrrn");

  70.                 if(cli_addr != NULL)
  71.                 {
  72.                         memcpy(cli_addr, &their_addr, sizeof(struct sockaddr));
  73.                 }

  74.                 //处理目标
  75.                 ssize_t ret;
  76.                

  77.                 while(1)
  78.                 {
  79.             printf("%s %d rn", __FILE__, __LINE__);
  80.                         if((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1){
  81.                                 printf("recv error rn");
  82.                                 return -1;
  83.                         }
  84.                         printf("recv :rn");
  85.                         printf("%s", recvbuf);
  86.                         printf("rn");
  87.                         sleep(2);
  88.                         if((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1)
  89.                         {
  90.                                 perror("send : ");
  91.                         }

  92.                         sleep(2);
  93.                 }

  94.                

  95.                 close(new_fd);

  96.         return 0;
  97.         }
  98. }


  99. void TCPExampleEntry(void)
  100. {

  101.    

  102.     tcp_demo();

  103. }

  104. SYS_RUN(TCPExampleEntry);
复制代码
Hi3861的WIFI已经成功开启。通过串口调试ESP01s,可以连接WIFI,但是在连接TCP服务器时失败。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友