我client.c
server.c
在linux上有一个。在两者上我都初始化了一个套接字:
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
fromclient.c
时,服务器将客户端的 ip 视为0.0.0.0
,然后在第二次、第三次...调用client.c
get an ip 并拥有合法 ip,例如127.0.0.3:3212
. - 另一个奇怪的事情是,如果我启动第二个新客户端,它会从第一次获得 ip。