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

如何根据udp连接的socket 获取通过该socket发送报文时所使用的ip地址和端口号

    来源: 互联网  发布时间:2017-05-30

    本文导语:  创建一个没有指定ip地址的udp连接socket      bzero(&sock_addr, sizeof(sock_addr));     sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//----->>udp 连接     sock_addr.sin_family = AF_INET;     sock_addr.sin_addr = htonl(INADDR_ANY); //---->>没有指...

创建一个没有指定ip地址的udp连接socket 
    bzero(&sock_addr, sizeof(sock_addr));
    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//----->>udp 连接
    sock_addr.sin_family = AF_INET;
    sock_addr.sin_addr = htonl(INADDR_ANY); //---->>没有指定具体的ip地址
    g_cwmp_udp_port = cwmp_udp_random_port();
    sock_addr.sin_port = htons(g_cwmp_udp_port);
    rt = bind(sock_fd, (struct sockaddr *)&sock_addr, sizeof(sock_addr));

连接服务器,并使用 getsockname接口获取socket所使用的ip地址和端口号
    rt = connect(sockfd, (struct sockaddr *)&out_addr, sizeof(out_addr));
    if (rt != 0) {
        CWMP_DPRINT(CWMP_DBG_UDP, "Failed to connect server!n");
        return FALSE;
    }
    address_len = sizeof(out_addr);
    getsockname(sockfd, (struct sockaddr *)&out_addr, &address_len);

    CWMP_DPRINT(CWMP_DBG_UDP, "out address=%d, port=%d, g port=%dn",
            out_addr.sin_addr, out_addr.sin_port, g_cwmp_udp_port);

问题:out_addr.sin_port端口号是正确的,但是out_addr.sin_addr一直为零,请问如果能获取到真正的ip地址呢?

|
google以下2个函数
getsockname
getpeername

|
1、把getsockname放到bind之后呢,或者把bind去掉试下?
2、还有这代码有问题吧,out_addr是服务端地址,getsockname获取本地地址,咋用的都是一个变量?

|
这两个api的功能更强,更安全。
getaddrinfo
getnameinfo

|
该回复于2014-12-02 09:10:51被管理员删除

    
 
 

您可能感兴趣的文章:

  • UDP发广播报文的问题?
  • 网关可以通过ICMP报文来控制客户机向外界的udp请求吗?
  • 内核是不会把tcp/udp报文传递给raw socket??
  • UDP杂收模式socket编程
  • UDP SOCKET编程,不能发送广播数据包
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • udp socket和tcp的有什么冲突吗?
  • 创建了2个套接字Raw socket和socket,都调用recvfrom(),一个专门捕获数据包,一个在9001端口监听UDP请求,怎么不行?
  • udp socket客户端和udp服务端程序示例分享
  • 求助UDP socket sendto返回EHOSTDOWN的问题
  • linux下UDP,socket编程问题,在线
  • {求救}socket编程处理udp广播
  • jdk1.3.1的BUG? udp socket on windows2000
  • 能够在端口9001上监听其他应用的UDP请求,并打印其请求的数据包内容。先不管什么格式,请问如何用socket编写。
  • 看看UDP socket 端口 自动绑定的怪事?
  • UDP怎么检测对方socket已关闭无法接收数据?
  • Linux socket udp
  • 帮帮忙!!!我用udp sockets 写了聊天室,有问题。
  • 发送UDP,Socket operation on non-socket,初学,请指教
  • c# socket编程udp客户端实现代码分享
  • socket写的udp收包程序,编译老出错。。。
  • 高分求解linux socket通信 UDP丢包问题
  • linux下socket问题:为什么我的socket服务程序(UDP)总是第一次sendto()失败?
  •  
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 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广播例子)
  • TCP与UDP通信问题!
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 基于UDP的数据传输 UDT
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题
  • jme 0000:07:00.5:eht0:udp checksum error
  • udp的暂时连接


  • 站内导航:


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

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号