c - C(UDP)中的套接字服务器不接收数据包。怎么做?
问题描述
我已经在 C 中完成了一个 UDP 套接字服务器。只有当数据包发送到 127.0.0.1 时,服务器才能正常工作。我正在尝试使用数据包发送者对其进行测试,并且我想在地址 192.168.231.54 处打开一个套接字。无论如何,如果我在代码中写入此地址,我会收到一个错误(“无法分配请求的地址”),并且对于每个不同于 127.0.0.1 的单个地址都会出现此错误。我想打开一个到 192.168.231.54 的套接字,我想用 Packet Sender 向这个地址发送数据包。
这是服务器代码:
//*********SOCKET OPENING**************
int fd;
struct sockaddr_in serveraddr, cliaddr;
if ( (fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror( "socket failed" );
exit(EXIT_FAILURE);
}
memset( &serveraddr, 0, sizeof(serveraddr) );
memset(&cliaddr, 0, sizeof(cliaddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(50037);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ( bind(fd, (const struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0 ) {
perror( "bind failed" );
exit(EXIT_FAILURE);
}
else{
perror("socket opened");
}
//Receiving data into hex_array array
char hex_array[lenght];
int len;
len = sizeof(cliaddr);
int n = recvfrom(fd, (uint8_t *)hex_array, lenght, NULL, ( struct sockaddr *) &cliaddr, &len);
//Printing of the received data on the socket
printf("START DEBUG:\n");
printf("%s\n", hex_array);
printf("END DEBUG.\n");
解决方案
将套接字绑定到的地址实际上必须是您计算机的 IP 地址。您不能只选择一个随机地址。