打印

DSP6748 接收TCP数据丢包严重

[复制链接]
1273|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
utada08|  楼主 | 2018-4-23 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 utada08 于 2018-4-23 17:28 编辑

      我现在  在调试 DSP6748 接收网口数据并  保存到SD卡的程序,协议为TCP,DSP为客户端,数据源为服务器。
      调试中发现接收数据很慢,应该是丢包严重,数据源在300K每秒左右发送,使用网络调试助手接收  并且用wireshark 监测  数据源没有问题。计算接收到的数据量我的感觉是  每一大包数据  只收到了开头的1460个数据(每一大包数据是132数据头  +采样通道数x2048)。
      我使用的是创龙的开发板,例程做了小修改(TCP_client),采用的是NDK任务和SD卡读写任务 切换运行。
      想请教下是  因为配置的问题吗? 是需要改成软件中断还是其他原因呢?

      下面是接收数据的程序,麻烦大神分析下,不胜感激

void TcpTest(void)
{
    // 等待初始化完成
    Task_sleep(100);
    printf("Trying to connect 192.168.1.10:8000 ......\n");
    int j;
    int ijk;
    j = 0;
    SOCKET  s;
    struct  sockaddr_in SinDst;
    int i;
    char Title[] = "Tronlong Tcp Client Application";
    char *pBuf;
    struct  timeval timeout;

    HANDLE hBuffer;

    // 为任务分配文件描述符并打开一个会话
    fdOpenSession(TaskSelf());

    // 创建套接字
    //s = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP);
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s == INVALID_SOCKET)
    {
        printf("failed socket create (%d)\n", fdError());

        goto error;
    }

    // IP 地址
    mmZeroInit(&SinDst, sizeof(struct sockaddr_in));

    IPN IPAddr;

    if(!ConStrToIPN(IPStr, &IPAddr))
        printf("Invalid address\n\n");

    SinDst.sin_family      = AF_INET;
    SinDst.sin_addr.s_addr = IPAddr;
    SinDst.sin_port        = htons(Port);

    // 超时时间  5秒
    timeout.tv_sec  = 5;
    timeout.tv_usec = 0;
    setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof( timeout ));
    setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof( timeout ));

    // 建立连接
    if(connect(s, (PSA) &SinDst, sizeof(SinDst)) < 0)
    {
        printf("failed connect (%d)\n", fdError());

        goto error;
    }

    printf("Established the connection.\n");   

    // 测试
    for(;;)
    {
        // 接收数据
            //i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);
            for(ijk=0;ijk<10;ijk++)
            {
                    i = (int)recv(s, pBuf, 10000, MSG_WAITALL);


                    // 回传接收到的数据
                    if(i > 0)
                    {
                            printf("j:%d   i:%d\n",j++,i);
                    }
                    else
                    {
                            continue;
                    }

            }
                    recvncfree(hBuffer);
                    Task_sleep(10);

    }

    error:
        if(s != INVALID_SOCKET)
            fdClose(s);

    // 关闭文件会话
    fdCloseSession(TaskSelf());
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝