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

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -