使用RL_TCPnet创建TCP SERVER笔记

一、使用BSD Socket创建TCP SERVER

#define SOCK_PORT 1001
#define IP4_ENABLE  1

/// Stream socket server thread
static void Stream_Server (void *arg) {
  int32_t sock, sd, retv;
  char dbuf[4];

  while (1) {

#if (IP4_ENABLE)
    /* Create IPv4 socket address */
    SOCKADDR_IN  addr;
		memset(&addr, 0, sizeof(addr));
    addr.sin_family      = AF_INET;
    addr.sin_port        = htons (SOCK_PORT);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);

    sock = socket (AF_INET, SOCK_STREAM, 0);
    retv = bind (sock, (SOCKADDR *)&addr, sizeof (addr));
#endif

#if (IP6_ENABLE)
    /* Create IPv6 socket address (MDK-Pro only) */
    SOCKADDR_IN6 addr6;
    addr6.sin6_family    = AF_INET6;
    addr6.sin6_port      = htons (SOCK_PORT);
    addr6.sin6_flowinfo  = 0;
    if (!inet_pton (AF_INET6, "::", &addr6.sin6_addr)) {
      /* IPv6 not supported */
      for (;;);
    }

    sock = socket (AF_INET6, SOCK_STREAM, 0);
    retv = bind (sock, (SOCKADDR *)&addr6, sizeof (addr6));
#endif

    if (retv < 0) {
			printf("bind error\r\n");
      closesocket (sock);
      continue;
    }
    retv = listen (sock, 1);
    if (retv < 0) {
			printf("listen error\r\n");
      closesocket (sock);
      continue;
    }
		printf("before accept\r\n");
      sd = accept (sock, NULL, NULL);
			printf("accept\r\n");
      closesocket (sock);

    while (1) {
      retv = recv (sd, dbuf, sizeof (dbuf), 0);
      if (retv <= 0) {
        break;
      }
      if (dbuf[0] == 0x06) {
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
      }
    }
    closesocket (sd);
  }
}

注:使用BSD创建的TCP SERVER,其连接时间受以下两个参数影响
在Net_Config_BSD.h中Receive Timeout in seconds
若设置为1-600,则TCP的连接时间为1-600

若设置为0,则其连接时间由Net_Config_TCP.h的Default Connect Timeout in seconds决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*枫*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值