我在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
。答案 0 :(得分:9)
在调用recvfrom之前,请确保将slen设置为talker_addr结构的大小。它将在recvfrom中设置值(这可以解释它在后续调用中的工作原理)但如果初始值不正确,则第一次调用时可能会出现垃圾。
slen = sizeof(struct sockaddr_in);