Я пытаюсь отправить некоторые данные через сокет udp и получить их обратно в тот же сокет через Windows loopback adatper. В свойствах моей сети я установил для петлевого адаптера следующий IP 192.168.1.1
функция recvfrom возвращает -1, что указывает на ошибку. Я также отслеживаю трафик на адаптере обратной связи с помощью wireshark, и кажется, что ничего не отправляется на адаптер обратной связи, я не вижу трафика.
Правда ли, что в Windows мы не можем использовать адрес обратной связи (127.0.0.1)? Я видел это на некоторых форумах, поэтому я пытаюсь использовать петлевой адаптер.
Я также пытался отправить непосредственно на свой собственный IP, но это не дает лучших результатов. Кстати, можно ли отправить его на собственный ip и получить данные обратно?
Буду признателен за любую помощь, и на всякий случай я новичок в программировании сокетов.
Ниже мой код:
#define DST "192.168.1.1"
int _tmain(int argc, char* argv[])
{
int numbytes;
int bytes_sent;
int server_sock;
char send_msg[100];
int send_msg_length = 100;
char rcv_msg[100] = { 0 };
int rcv_msg_length = 100;
int i;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
fprintf(stderr, "WSAStartup failed.\n");
return 1;
}
sockaddr_in to_addr;
sockaddr_in me;
unsigned short Port = 27015;
to_addr.sin_family = AF_INET;
to_addr.sin_port = htons(Port);
to_addr.sin_addr.s_addr = inet_addr(DST);
me.sin_family = AF_INET;
me.sin_port = 0;
me.sin_addr.s_addr = htonl(INADDR_ANY);
memset( &(me.sin_zero), '\0', 8 );
if ((server_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("talker: socket");
}
if ( bind( server_sock, (SOCKADDR *)&me, sizeof( me ) ) == -1)
{
printf("Error binding/n");
return 1;
};
int length = sizeof( to_addr );
bytes_sent = sendto(server_sock, send_msg, send_msg_length, 0, (SOCKADDR *)&to_addr, length);
if (bytes_sent == -1)
{
perror("talker: sendto");
exit(1);
}
printf("Sent %d bytes to %s\n", bytes_sent, DST);
printf("listener: waiting to recvfrom...\n");
if ( numbytes = recvfrom(server_sock, rcv_msg, rcv_msg_length, 0, (SOCKADDR *)&to_addr, &length ) )
{
perror("recvfrom");
exit(1);
}
closesocket(server_sock);
WSACleanup();
return 0;
}