comunicazione p2p utilizzando Winsock
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.
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.