0

我之前问过这个问题并且没有解决方案(仍然有问题)。我被难住了,因为函数返回没有错误并且没有发送数据!此代码适用于 Linux ... VxWorks 版本不起作用(sendto 不发送,尽管它返回时没有错误)。

概要 - 我正在编写一个简单的回显服务器 - 服务器成功接收数据(来自 x86 机器)并声称它已成功将其发回。但是客户端上没有收到数据(x86 上的 netcat)。此代码在 PowerPC 机器上的 VxWorks 5.4 上运行...

  • 我是否以某种方式缓冲了 UDP 数据?

  • 另一个任务会阻止 sendto 发送吗?(不要在这里疯狂追逐,但我以正常优先级执行我的应用程序,即低于网络任务等关键任务......所以这很好)。

  • VxWorks 可以缓冲我的 UDP 数据吗?

  • 我已经设置了我的路由表... ping 正常!

  • 没有防火墙AFAIK ...

  • sendto 的细微差别是什么,什么会阻止我的数据到达客户端......

    while(1)
    {
    readlen = recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &client_address, &slen);

    if (readlen == ERROR)
    {
        printf("RECVFROM FAILED()/n");
        return (ERROR);
    }

    printf("Received %d bytes FROM %s:%d\nData: %s\n\n",
           readlen, inet_ntoa(client_address.sin_addr),
    ntohs(client_address.sin_port), buf);

    // Send it to right back to the client using the open UDP socket
    // but send it to OUTPORT
    client_address.sin_port = htons(OUTPORT);

    // Remember slen is a value (not an address ... in, NOT in-out)
    sendlen = sendto(sock, buf, BUFLEN, 0, (struct sockaddr*)&client_address, slen);

    // more code ....
   }
4

1 回答 1

1

我信任ERROR被定义为-1,对吗?那你在检查sendto(2)调用的返回值吗?errno(3)价值呢?

我在代码中看到的一个明显问题是您给出BUFLEN了要发送的消息的长度,而实际上应该是readlen- 您收到的字节数。

于 2010-10-19T03:14:42.320 回答