为什么第一个客户看到有0.0.0.0,源IP?(Why the first client sees

2019-09-02 20:14发布

我有一个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()");
  1. 问题是,在第一通话到sendtoclient.c ,服务器认为客户端的IP为0.0.0.0 ,之后在第二,第三,......会调用client.c获取IP,并有一个合法的IP如127.0.0.3:3212
  2. 另一个奇怪的是,如果我开始第二个新的客户端它获取IP从第一次。

Answer 1:

请确保你调用recvfrom的之前要设置SLEN到talker_addr结构的大小。 这将设定值(这可以解释为什么它在后续的调用)在recvfrom的,但如果有一个不好的初始值,你可能会得到垃圾第一个电话。

slen = sizeof(struct sockaddr_in);


文章来源: Why the first client sees to have source ip of 0.0.0.0?