0
我已经建立了UDP接收器,如:未交付的UDP数据包 - recvfrom的()永远不会返回
int rx_socket;
struct sockaddr_in my_addr;
struct sockaddr_in rem_addr;
socklen_t addrlen = sizeof(rem_addr);
rx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(9900);
rc = bind(rx_socket, (struct sockaddr *) &(my_addr), sizeof(my_addr));
if (!rc) {
printf("BIND SUCCESSFULL\n");
}
char buf[250];
while(1) {
printf("WAITING\n");
recvfrom(rx_socket, buf, sizeof(buf), 0, (struct sockaddr *)&rem_addr, &addrlen);
printf("RECEIVED\n");
}
的recvfrom的()永远不会返回。我也做了一些Wireshark的分析,这表明数据包是否有:
摘要:
用户数据报协议,源端口:57506(57506),目的端口:IUA(9900)
校验: 0x14a2 [验证禁用]
数据(8个字节)
任何帮助将不胜感激。
编辑:
一个有趣的观察是,源,这是一个DSP未能发送的数据包,即,SENDTO()返回-1,直到我平到它,从目的地。在ping之后,源可以开始发送数据包。
编辑2:
这里是发送者的代码:
int fd;
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(9900);
inet_aton("10.0.201.102", &(my_addr.sin_addr));
char buf[250];
for (;;) {
int bytesSent = sendto(fd, buf, 8, 0,
(struct sockaddr *) &(my_addr), sizeof(my_addr));
printf("sent: %d bytes\n", bytesSent);
sleep(1000);
}
尽管程序的输出是什么? – alk
第一次打印到控制台:“WAITING” – Iceman
OT:这个'if(!rc)'是错的! 'bind()'在错误时返回'-1',所以它应该是'if(-1!= rc)'。 '0'是一个很少使用的,但是有效的套接字描述符。 – alk