我之前问过这个问题并且没有解决方案(仍然有问题)。我被难住了,因为函数返回没有错误并且没有发送数据!此代码适用于 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 ....
}