我在 Linux 上有一个
client.c
server.c
。我在两者上都初始化了一个套接字:
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
在服务器中我添加:
listen_addr.sin_family = AF_INET;
listen_addr.sin_port = htons(port);
listen_adrr.sin_addr.s_addr = htonl(INADDR_ANY);
server.c
呼叫(阻塞方式)到recvform
:
if (recvfrom(sockfd, buf_get, BUFLEN, 0, (struct sockaddr*)&talker_addr, &slen) == -1)
err("recvfrom()");
并且
client.c
发送数据包:
if (sendto(sockfd, buf_sent, BUFLEN, 0, (struct sockaddr*)&serv_addr, slen) == -1)
err("sendto()");
sendto
调用
client.c
,服务器看到客户端的ip为0.0.0.0
,之后
在第二个、第三个...调用 client.c
获取 ip 并
有合法的ip,例如127.0.0.3:3212
。在调用 recvfrom 之前,请确保将 slen 设置为 talker_addr 结构的大小。 它将在recvfrom中设置值(这可以解释为什么它在后续调用中起作用),但如果初始值不好,您可能会在第一次调用时得到垃圾。
slen = sizeof(struct sockaddr_in);