我在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数据包时,我可以用它来检索这些信息?
谢谢
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
recvfrom()应该在第五个参数(struct sockaddr*)中返回给你.
编辑: 使用这样的东西
struct sockaddr_in client; recvfrom(... (struct sockaddr*)&client ...);
client.sin_port
应该是发件人的端口.