我已经设置了UDP接收器,如:
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分析,它表明数据包在那里:
要点:
用户数据报协议,Src端口:57506(57506),Dst端口:iua(9900)
校验和:0x14a2 [已禁用验证]
数据(8个字节)
任何帮助将不胜感激。
编辑:
一个有趣的观察结果是,作为DSP的源无法发送数据包,即sendto()返回-1,直到我从目的地ping它。 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);
}
答案 0 :(得分:0)
所以问题最终出现在virtualbox上。我的发件人在主机上,但接收器在虚拟机上。如果我也在主机上运行接收器,则正在接收UDP数据包。