[英]Sender IP/Port for UDP Socket
是否可以使用C套接字获取发送者IP和(动态获得的)端口? 我有以下内容:
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
if ((rv = getaddrinfo(NULL, DATABASEPORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
exit(1);
}
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
perror("socket");
continue;
}
break;
}
这几乎是从指南中摘取的(尽管我有点理解?)。 但是我在确定要用来查找客户数据的信息方面遇到麻烦。
任何和所有帮助表示感谢,谢谢!
通常,您可以使用getsockname(2)
获取本地地址/端口信息,但是这里还没有-套接字没有连接并且什么也没发送。 如果这是一个简单的UDP客户端-考虑使用已连接的UDP套接字 -您可以在connect(2)
之后立即看到本地IP /端口。
对于未连接的UDP套接字,无法获取本地地址。 您当然可以通过使用recvfrom
而不是read
/ recv
来读取数据包来获取远程地址。 如果您只与单个服务器通信,则继续并使用connect
。 如果您需要与多个服务器进行通信,则可以仅在其中一个服务器上进行虚拟connect
(在新的套接字上)以获取您的本地地址,但是也可以(如果主机使用非平凡的路由)连接到不同的远程主机将导致不同的本地地址。 如果同时连接到localhost
( 127.0.0.1
)和远程服务器,则在相当琐碎的环境中甚至可能发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.