Winsock:获取UDP数据发送端的IP地址和端口号

 UDP的接收端使用函数 recvfrom接收数据,这个函数在winsock.h中定义如下:

int recvfrom(
  __in         SOCKET s,
  __out        char* buf,
  __in         int len,
  __in         int flags,
  __out        struct sockaddr* from,
  __inout_opt  int* fromlen
);

其中的参数 from 就保存了数据发送端的IP地址和端口号,为了便于说明,sockaddr_in结构在winsock中定义如下:

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

sin_addr:数据发送端的IP地址;

sin_port:数据发送端的端口号;

所以,可以使用如下的代码获取数据发送端的IP地址和端口号:

......
CHAR szClientIP[128], szClientPort[64];
strcpy(szClientIP, inet_ntoa(from.sin_addr));
strcpy(szClientPort, itoa(ntohs(from.sin_port)));
......

函数inet_ntoa的作用是将一个IPv4的网络地址转换成为一个标准的IP地址字符串,并且以点号(.)分割,在winsock.h中定义如下:

char* FAR inet_ntoa(
  __in  struct   in_addr in
);

函数ntos的作用是将一个16的无符号数有网络字节顺序转换成主机字节顺序,在winsock.h中定义如下:

u_short ntohs(
  __in  u_short netshort
);


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值