好的,我正在尝试编写UDP代码,并且在使用C进行网络编程方面还很生疏。 我正在使用这里提供的示例文件。
基本上,我只是在监听给定端口上的传入UDP数据包,然后希望以同样的方式发送一些数据回去。下面是相关部分。
此时,套接字已经设置并绑定到所选端口,并等待传入数据包:
printf("GSProxy: waiting to recvfrom...\n");
addr_len = (socklen_t) sizeof their_addr;
if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) { // argument 6 gives a warning but is correct int
perror("recvfrom");
exit(1);
}
printf("GSProxy: got packet from %s\n",
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr), s, sizeof s));
printf("GSProxy: packet is %d bytes long\n", numbytes);
buf[numbytes] = '\0';
printf("GSProxy: packet contains \"%s\"\n", buf);
char retmsg[] = "Hello!";
if ((numbytes = sendto(sockfd, retmsg, 7, 0,
(struct sockaddr *) &their_addr, &addr_len)) == -1) {
perror("GSPProxy: sendto");
exit(1);
}
printf("GSProxy: Sent %i bytes.\n", numbytes);
我只想将字符串“Hello!”直接发送回发件人。
这会出现错误“
GSPProxy:sendto:文件名过长
”。就我所知,这是[ENAMETOOLONG]错误代码。但是……这是什么意思?哪个文件?什么太长了?
是因为我不能重复使用套接字来发送数据回去,还是我犯了另一个新手错误?
此致敬礼。