发 帖  
原厂入驻New
[资料]

【HarmonyOS HiSpark Wi-Fi IoT套件】第5节 Hi3861 网络编程,TCP服务器

2020-11-3 14:00:46  162 HarmonyOS Wi-Fi IoT
分享
原文链接:https://bbs.elecfans.com/jishu_1994928_1_1.html

鸿蒙系统的TCP协议栈是lwIP,支持socket接口编程。
我们只需要导入对应的头文件。

#include "lwip/sockets.h"

以下是TCP代码部分,完整的代码见附件。


  1. #define SERVER_PORT_TCP                        6666
  2. #define TCP_BACKLOG 10


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

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

  7. int tcp_demo(void)
  8. {

  9.         /* 自己的地址信息 */
  10.         struct sockaddr_in my_addr;
  11.         /*        连接者的地址信息*/
  12.         struct sockaddr_in their_addr;
  13.         int sin_size;

  14.         struct sockaddr_in *cli_addr;

  15.     printf("%s %d \r\n", __FILE__, __LINE__);

  16.     /* 1 、创建socket  */
  17.         IF((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  18.         {
  19.         printf("%s %d \r\n", __FILE__, __LINE__);
  20.                 perror("socket is error\r\n");
  21.                 exit(1);
  22.         }

  23.     /* 主机字节顺序 */
  24.         /* 协议 */
  25.         my_addr.sin_family = AF_INET;
  26.         my_addr.sin_port = htons(6666);
  27.         /* 当前IP 地址写入 */
  28.         my_addr.sin_addr.s_addr = INADDR_ANY;

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

  31.     printf("%s %d \r\n", __FILE__, __LINE__);
  32.         /* bind 绑定*/
  33.         if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
  34.         {
  35.         printf("%s %d \r\n", __FILE__, __LINE__);
  36.                 perror("bind is error\r\n");
  37.                 exit(1);
  38.         }

  39.     printf("%s %d \r\n", __FILE__, __LINE__);
  40.         /* 开始监听 */
  41.         if(listen(sock_fd, TCP_BACKLOG) == -1)
  42.         {
  43.                 perror("listen is error\r\n");
  44.                 exit(1);
  45.         }

  46.     printf("%s %d \r\n", __FILE__, __LINE__);
  47.         printf("start accept\n");

  48.     /* accept() 循环 */
  49.         while(1)
  50.         {
  51.                 sin_size = sizeof(struct sockaddr_in);

  52.         printf("%s %d \r\n", __FILE__, __LINE__);
  53.                 if((new_fd = accept(sock_fd, (struct sockaddr *)&their_addr, (socklen_t *)&sin_size)) == -1)
  54.                 {
  55.                         perror("accept");
  56.                         continue;
  57.                 }

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

  59.                 printf("accept addr\r\n");

  60.                 if(cli_addr != NULL)
  61.                 {
  62.                         memcpy(cli_addr, &their_addr, sizeof(struct sockaddr));
  63.                 }

  64.                 //处理目标
  65.                 ssize_t ret;
  66.                

  67.                 while(1)
  68.                 {
  69.             printf("%s %d \r\n", __FILE__, __LINE__);
  70.                         if((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1){
  71.                                 printf("recv error \r\n");
  72.                                 return -1;
  73.                         }
  74.                         printf("recv :\r\n");
  75.                         printf("%s", recvbuf);
  76.                         printf("\r\n");
  77.                         sleep(2);
  78.                         if((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1)
  79.                         {
  80.                                 perror("send : ");
  81.                         }

  82.                         sleep(2);
  83.                 }

  84.                

  85.                 close(new_fd);

  86.         return 0;
  87.         }
  88. }
复制代码



tcp_demo.rar (2.99 KB, 下载次数: 1)









0

评分

参与人数 1积分 +5 收起 理由
zhjy0513 + 5 1

查看全部评分

分享淘帖 显示全部楼层
最近下载过的用户(1)

只有小组成员才能发言,加入小组>>

1100个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表