Verbindung via IPv6 herstellen
-
tach zusammen,
ich hätte da mal ein mittelschweres verständnisproblem zu einer sache die mir mein chef in der praxisphase von meinem studium aufgetragen hat. ich soll durch ein c++ programm (konsolenanwendung reicht) eine verbindung mit einem server, einer internetseite oder was auch immer herstellen und das ganze soll IPv6 kompatibel sein.
jetzt ist mein chef nicht da und ich weiß nicht so richrig wo ich anfangen soll. bin auch c++ technisch noch relativ am anfang ...
er hat mir anfang noch einen codeausschnitt mit der übertragung via IPv4 geschickt.SOCKET ViaConnectConnect(char *host,int port) { SOCKET so=INVALID_SOCKET; SOCKADDR_IN sad; struct hostent *he; union u_ipadr { unsigned long l; unsigned char c[4]; }; union u_ipadr ipadr; // ggf. Server-Name nach IP-Adresse auflösen if(host[0]>'9') { // nur wenn Name nicht schon eine IP-Adresse ist if(!(he=gethostbyname(host))) { return(INVALID_SOCKET); } if(!he->h_addr_list[0]) { return(INVALID_SOCKET); } ipadr.c[0]=he->h_addr_list[0][0]; ipadr.c[1]=he->h_addr_list[0][1]; ipadr.c[2]=he->h_addr_list[0][2]; ipadr.c[3]=he->h_addr_list[0][3]; } so=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); // Socket oeffnen if(so==INVALID_SOCKET) { return(INVALID_SOCKET); } else { // Socket erfolgreich geoeffnet //connect to ip address and port sad.sin_family=AF_INET; if(host[0]>'9') sad.sin_addr.s_addr=ipadr.l; else sad.sin_addr.s_addr=inet_addr(host); sad.sin_port=htons(port); // Port if(connect(so,(LPSOCKADDR)&sad,sizeof(sad))) { closesocket(so); return(INVALID_SOCKET); } } return(so); }
jetzt würde ich gerne wissen, wie ich das problem am besten angehe. vielleicht hat schon jemand was ähnliches gemacht und kann mir helfen die sache zu verstehen.
danke schonmal im voraus
gruß bautzi
-
Ok und was ist jetzt dein Problem?
-
naja ich weiß halt net so genau wie ich an das problem rangehen soll und was dann bei IPv6 anders sein soll. ich brauch net unbedingt eine fertige lösung, mir gehts mehr ums verständnis, dass ich weiß womit ich beschäftigen muss um die sache hinzubekommen...
-
http://openbook.galileocomputing.de/c_von_a_bis_z/025_c_netzwerkprogrammierung_008.htm#mj46218b64e64226323710c041737ff1a5 (Ja, ich weiß, sollte nicht die erste Wahl sein :))
-
danke! das hilft mir erstmal etwas weiter.
-
int sock;
struct sockaddr_in6 name;/* Create the socket. */
sock = socket (AF_INET6,SOCK_STREAM,0);
if (sock < 0)
throw socket_error("Error when creating a socket.");/* Set REUSE option (this makes rebinding after a server shutdown
* quicker). */
int reuse = 1;
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0)
throw socket_error("Error when setting socket options.");/* Give the socket a name. */
name.sin6_family = AF_INET6;
name.sin6_port = htons(port);
name.sin6_addr = in6addr_any;
if (bind(sock,(struct sockaddr &name,sizeof (name)) < 0)
throw socket_error("Error when binding the server socket to its port.");return sock;
Auch
man 7 ipv6
unter Linux kann sehr hilfreich sein.
-
besten dank dafür.
ich werd mal sehen wie ich das dann einbauen kann. muss mich erstmal noch intensiver mit dem thema beschäftigen...