【发布时间】:2010-10-16 13:59:27
【问题描述】:
我之前问过这个问题,但没有解决(仍然有问题)。我被难住了,因为函数返回没有错误并且没有发送数据!此代码适用于 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 ....
}
【问题讨论】:
-
仍在为此苦苦挣扎...确保我在启动时将 client_address 归零...这很奇怪...
-
为什么要发送到不同的端口?
-
发送到不同的端口应该没有问题...
-
经过更多修改后,我开始怀疑防火墙...来自另一个 Linux Box(在关注的子网中)的 netcat 无法访问子网外的 Linux Box...防火墙或网关可能在做这个?
-
不,没有错,只是想知道。