硬汉嵌入式论坛

 找回密码
 立即注册
查看: 42|回复: 2
收起左侧

[RL-TCPnet] rl-tcpnet的bsd socket发送出错

[复制链接]

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 jiny 于 2026-7-14 09:16 编辑

我用设备接小票打印机,用以下代码可以打印成功!


int32_t PrintSend(char *pData, int32_t Size)
{
  int32_t Ret;
  int32_t Sock;

  if (!pData || !Size) {
    return -1;
  }

  Sock = socket (AF_INET, SOCKTYPE, 0);
  if (Sock < 0) {
    return -1;
  }
  Ret = connect (Sock, (SOCKADDR *)&Addr, sizeof(Addr));
  if (Ret < 0) {
    closesocket (Sock);
    return -1;
  }

  Ret = send(Sock, "0123456789", 10, 0);
  if (Ret < 0) {
    closesocket (Sock);
    return -1;
  }

  closesocket (Sock);
  return Size;
}

但是很诡异,换成如下代码就不行了

int32_t PrintSend(char *pData, int32_t Size)
{
  int32_t Ret;
  int32_t Sock;

  if (!pData || !Size) {
    return -1;
  }

  Sock = socket (AF_INET, SOCKTYPE, 0);
  if (Sock < 0) {
    return -1;
  }
  Ret = connect (Sock, (SOCKADDR *)&Addr, sizeof(Addr));
  if (Ret < 0) {
    closesocket (Sock);
    return -1;
  }

  Ret = send(Sock, "01234", 5, 0);
  if (Ret < 0) {
    closesocket (Sock);
    return -1;
  }
  osDelay(1000);

  Ret = send(Sock, "56789", 5, 0);
  if (Ret < 0) {
    closesocket (Sock);
    return -1;
  }

  closesocket (Sock);
  return Size;
}

网口绿灯一直闪,但是就是打印机无法打印!
愁死人了
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123497
QQ
发表于 昨天 11:35 | 显示全部楼层
直接用网络助手发送命令,看看正常不,这个优先测试

正常后再代码测试,直接把TCPnet的ARM官方地址手册给AI,让AI生成代码即可,AI生成socket代码,非常擅长
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 昨天 15:36 | 显示全部楼层
本帖最后由 jiny 于 2026-7-16 16:25 编辑

设备接电脑正常,没问题
电脑接小票打印机也正常,没问题
但设备接小票打印机就不对头了
  
  if (tcp_s->Flags & (TCP_IFLAG_DACK | TCP_IFLAG_CLOSING)) {
    /* Last frame not yet acked localy, or the socket is closing */
    return (false);
  }

第二次send时,这里检测通不过(net_tcp.c -> bool net_tcp_check_send (int32_t socket)),
tcp_s->Flags = TCP_IFLAG_DACK,不知道什么原因。

改动代码,强制通过检测后,有明显改善,但还是有可能后续send不成功。
改动如下:

  tcp_s->Flags &= ~TCP_IFLAG_DACK;
  if (tcp_s->Flags & (TCP_IFLAG_DACK | TCP_IFLAG_CLOSING)) {
    /* Last frame not yet acked localy, or the socket is closing */
    return (false);
  }


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-7-17 05:53 , Processed in 1.480084 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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