udp socket通讯,recvfrom()一直返回-1,perror提示"recvfrom: Bad address"

ye_cl 2007-01-25 02:02:14
本人在设备中两个进程间socket通讯,udp方式,相同IP不同端口号.其中一个进程向另一个进程发送数据后,接收对方响应数据,recvfrom()一直返回-1,perror提示"recvfrom: Bad address",但是接收到的响应数据又是对的,不知道错在哪里?代码如下.另一个进程工作正常.

...
myTagType tag;//256 bytes
int tsresponse_sock;
struct sockaddr_in TSResponse;//local IP
struct sockaddr_in source_resp;//dest IP
int command_port = 3200; //udp control port;
int on = 1;

...
bzero(&TSResponse, sizeof(TSResponse));
TSResponse.sin_family = AF_INET;
TSResponse.sin_addr.s_addr = htonl(INADDR_ANY);
TSResponse.sin_port = htons(command_port+1);
tsresponse_sock = socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(tsresponse_sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));
bind(tsresponse_sock, (struct sockaddr *)&TSResponse, sizeof(struct sockaddr_in));

bzero(&source_resp, sizeof(source_resp));
source_resp.sin_family = AF_INET;
source_resp.sin_addr.s_addr = local_ipaddr;
source_resp.sin_port = htons(command_port);

....
sendto(tsresponse_sock, &tag, 20, 0, (struct sockaddr *)&source_resp, sizeof(struct sockaddr_in));
....
timeout.tv_sec=3;
ret = select(tsresponse_sock+1, &fdread, NULL,&fdexcept, &timeout);
....
else if (FD_ISSET(tsresponse_sock,&fdread)) {
{
bzero (&tag, sizeof (tag));
nsize = recvfrom(tsresponse_sock, &tag, sizeof(tag), 0, (struct sockaddr *)&source_resp, sizeof(struct sockaddr_in));
printf("recv nsize = %d\n",nsize);
if(nsize == -1) perror("recvfrom");
....
}
...
...全文
3071 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdi7922 2010-07-23
  • 打赏
  • 举报
回复
07年的帖子,楼主面子真大啊
cceczjxy 2007-09-03
  • 打赏
  • 举报
回复
读的长度无效就出这样的错误.
hzcpig 2007-09-03
  • 打赏
  • 举报
回复
recvfrom最后一个参数是int *,而你是int

int addr_len =sizeof(struct sockaddr_in);

nsize = recvfrom(tsresponse_sock,&tag,sizeof(tag),0,(struct sockaddr*)&source_resp,&addr_len);


另外....2007-01的帖子怎么还没结贴~~~~不是有强制结贴机制么~~~
ye_cl 2007-09-03
  • 打赏
  • 举报
回复
又碰到这个问题了,谁知道?
ancient 2007-03-05
  • 打赏
  • 举报
回复
recvfrom最后一个参数是socklen_t *, 你用的是socklen_t
ye_cl 2007-01-29
  • 打赏
  • 举报
回复
谁知道啊
ye_cl 2007-01-26
  • 打赏
  • 举报
回复
我把两个进程各自接收到的数据源IP/PORT打印出来看,都是对的. 本机对本机不同端口发送不至于有这种现象吧?
晨星 2007-01-25
  • 打赏
  • 举报
回复
先让两个进程各自把源IP/PORT和目标IP/PORT打印出来看看?

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧