当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2016-02-27

    本文导语:  本人在设备中两个进程间socket通讯,udp方式,相同IP不同端口号.其中一个进程向另一个进程发送数据后,接收对方响应数据,recvfrom()一直返回-1,perror提示"recvfrom: Bad address",但是接收到的响应数据又是对的,不知道错在哪里?...

本人在设备中两个进程间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 = %dn",nsize);
       if(nsize == -1) perror("recvfrom");
       ....
     }
     ...

|
recvfrom最后一个参数是socklen_t *, 你用的是socklen_t

|
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的帖子怎么还没结贴~~~~不是有强制结贴机制么~~~

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助,udp文件传输发送端发送完了,接收端却接受到一半就bad address?
  • udp socket 协议问题,大家帮我找找原因,出现的错误是 recv: Bad address
  • udp 出现address already in use
  • Qt:UDP:如何划分接收到的UDP包的界限
  • udp包大于1500字节网络传输会分包吗?udp tcp多大的包比较合适?
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 50求教一个菜鸟级别的UDP套接字问题,关于UDP server端只能接收一次数据的问题?在线等,一直等............
  • udp方式抓取网页
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • udp socket客户端和udp服务端程序示例分享
  • TCP与UDP通信问题!
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 基于UDP的数据传输 UDT
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3