Domanda

Sto cercando di ottenere la comunicazione peer to peer utilizzando il Winsock ma gethostbyaddr me tornare sempre NULL, questa cosa funziona solo su localhost, nome server è la destinazione indirizzo IP

server_name="<--ipaddress-->"

struct sockaddr_in server;
addr = inet_addr(server_name);
cout<<"inet_addr(server_name) "<<addr<<endl;
hp = gethostbyaddr((char *)&addr, 4, AF_INET);
memset(&server, 0, sizeof(server));


memcpy(&(server.sin_addr), hp->h_addr, hp->h_length);
server.sin_family = hp->h_addrtype;
server.sin_port = htons(port);
conn_socket = socket(AF_INET, socket_type, 0); 

connect(conn_socket, (struct sockaddr*)&server, sizeof(server))

Abbiamo già raggiunto la comunicazione p2p che usa python e funziona perfettamente bene su stessa porta non e indirizzo .. grazie per qualsiasi indizio ..

Non ho idea di come farlo in C ++, in python che legano appena usato (---), Qualcuno mi può mostrare frammento di codice come raggiungerlo.

È stato utile?

Soluzione

Dove vuoi arrivare server_name da? Sei sicuro che sia un indirizzo IP valido? Inoltre, controllare per vedere WSAGetLastError() specificamente che cosa c'è che non va.

Ricordate che non tutti i nomi degli host hanno voci DNS inversa. E 'perfettamente legittimo per gethostbyaddr a fallire su un vero e proprio, l'indirizzo IP valido. Se stai facendo p2p, è meglio non fare affidamento su host nomi a tutti, tranne forse per i display di diagnostica (e ricadere a indirizzi IP se non riescono ricerche inverse).

Modifica :. Con il vostro esempio di codice nuovo, ampliato, è chiaro che in realtà non c'è bisogno gethostbyaddr a tutti

struct sockaddr_in server;
memset((void*)&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.S_un.S_long = inet_addr(server_name);
server.sin_port = htons(port);
conn_socket = socket(AF_INET, socket_type, 0); 

connect(conn_socket, (struct sockaddr*)&server, sizeof(server))

gethostbyaddr è necessaria solo quando è necessario il reverse DNS nome del server in questione. inet_addr già fornisce un indirizzo adatto per la connessione a.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top