当前位置:  开发笔记 > 运维 > 正文

如何在C中获取发件人的UDP端口?

如何解决《如何在C中获取发件人的UDP端口?》经验,为你挑选了2个好方法。

我在Linux下的C中有以下典型代码来获取UDP数据:

sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
mysock.sin_family = AF_INET;
mysock.sin_addr.s_addr = INADDR_ANY;
mysock.sin_port = my_port;
bind(sock, &mysock, sizeof(mysock);
recvfrom(sock, buf, PKTSZ, 0, &client, len);

以上所有代码都有效,但现在我需要找出发送方的udp端口,是否有结构或系统调用,当我收到udp数据包时,我可以用它来检索这些信息?

谢谢



1> 小智..:

recvfrom(sock,buf,PKTSZ,0,&client,len);

发件人套接字地址存储在代码的客户端变量中.要访问发件人端口,请使用sockaddr_in而不是sockaddr.例:

sockaddr_in client;
int len = sizeof(client);
recvfrom(sock, buf, PKTSZ, 0, (struct sockaddr *)&client, (socklen_t *)&len);
int port = ntohs(client.sin_port);

参考文献: Beej的网络编程指南和MSDN



2> sigjuice..:

recvfrom()应该在第五个参数(struct sockaddr*)中返回给你.

编辑: 使用这样的东西

struct sockaddr_in client;

recvfrom(... (struct sockaddr*)&client ...);

client.sin_port 应该是发件人的端口.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有