C++ problem with Datagram (UDP)winsocket to sendto and recvfrom on the same socket through the loopback adapter -
i trying send data udp socket , receive them on same socket through windows loopback adatper. in network properties set loopback adapter have following ip 192.168.1.1
the recvfrom function returns -1 indicating error. monitor traffic on loopback adapter wireshark , nothing seem sent loopback adapter, see no trafic.
is true on windows can't use loopback address(127.0.0.1) ? saw on forums, why try use loopback adapter. tried send directly own ip, gives no better results. btw possible send own ip , data back?
i appreciate , in case, new socket programming.
below code:
#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 %s\n", bytes_sent, dst); printf("listener: waiting 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; }
you binding server socket port 0
, i.e. asking os assign random port number it. has same port sending to, 27015
in case.
also, don't have byte-swap inaddr_any
.
Comments
Post a Comment