问个sendto error
本帖最后由 jieao111 于 2012-11-15 17:56 编辑我的代码 ret = recvfrom(*sk, &ack, sizeof(ack), 0, (struct sockaddr *)&mote, &slen);
if(ret>0)
{
ack_back=ack+1;
if(sendto(*sk, &ack_back, sizeof(ack_back),0,(const struct sockaddr*)&mote, sizeof(struct sockaddr)) == -1)
{
perror("recv_msg sendto error");
return -1;
}
}我这个报错recv_msg sendto error: Network is unreachbale
我奇怪,我从这个地址收到消息,为什么我往地址返回信息就不行呢 (struct sockaddr *)&mote, &slen
slen赋值过吗?必须赋值成slen = sizeof(struct sockaddr_in), 否则slen是随机数太小了会把地址截断到mote里,slen是一个in/out参数。 回复 2# linux_c_py_php
赋值了,而且我之前还打印出来了发送端得地址,recv没有问题,关键在于sendto
ps,我写的nat穿透的程序,这个一个内网里的主机发来的消息,,可是我返回不去了,,理论上应该是可以返回的
理论上是可以的.
还有, sendto里建议sizeof(struct sockaddr_in), 因为sockaddr和sockaddr_in虽然在尺寸上一样, 但这并不是保证, 而且放到sendto里语义也不对. 继续呀,高手们,我也遇到过这样的问题,一直没有解决,求高手帮忙:time:
页:
[1]