Kleines Chat Programm Server/Client
-
Hallo Leute,
Ich möchte ein kleines Chat Programm schreiben. Local und mit einer fester IP funktioniert es wunderbar(Da ich meine feste IP eingetragen habe).
Wenn ich den Client zum beispiel auf einen anderen Rechner starte muss die IP aus einer DNS umgewandelt werden.Bei den Server kann ich die feste IP des Routers eintragen da der Router die aktuelle IP sich holt.
Server:SOCKADDR_IN addr; memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(123); addr.sin_addr.s_addr=inet_addr("192.168.0.25");
Der Client
SOCKADDR_IN addr; LPHOSTENT ip; ip = gethostbyname("mein.test.domain.com"); memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(4000); addr.sin_addr = *((LPIN_ADDR)*ip->h_addr_list);
Der Server bindet die IP und den Port ein. Warten auf die Verbindung.
Beim Client scheitert aber die Verbindung ich bekomme den Fehler error 10060Die mein.test.domain.com bekommt meine Aktueklle Ip durch ein seperates Programm von no-ip.com
Wie löst man die dns in eine IP adresse um?
Ich bedank mich schon jetzt für Tipps
-
Das Eintragen der IP beim Server kannst du dir eigentlich komplett sparen und automatisieren.
addrIn.sin_addr.s_addr = htonl(INADDR_ANY);
Bei den beiden Codeschnipseln hast du derzeit unterschiedliche Ports hinterlegt.
Das dürfte zu Problemen führen.Um die Verbindung des Clients von außen zu testen, empfehle ich, erstmal den Weg ohne Domaine mit fest eingetragener IP. Diese kannst du dir ja vom Router holen oder hier > http://www.wieistmeineip.de/
Weiterhin wirst du ein Portmapping auf dem Router einrichten müssen. (Falls du sowas nicht schon aufgrund deiner vorhin erwähnten unterschiedlichen Ports getan hast). Oft Zu finden unter dem Punkt NAT ebenfalls auf dem Router.
Dei Fehler 10060 bezeichnet einen Timeout. (Connection Timeout oder so)
http://msdn.microsoft.com/en-us/library/ms681391(v=vs.85).aspx
Von daher sollte man erstmal diese Probleme lösen, bevor man mit DNS gleich mehrere Baustellen aufmacht
-
Das mit dem Port war ein Tipp fehler.
Es funktioniert schon bei mir mit einer festen IP. Wie gesagt mit der Router IP beim Client und Server hab ich es schon zum laufen gebracht.
Die Verbindung wurde herrgestellt und Server und Client konnten mit sich "Unterhlaten".Nun möchte ich aber bei den Client nicht die Ip eintragen sondern eine DNS.
Meine Frage wie kann man die dns in eine ip umwandeln.
Danke sehr
-
Achso, das ging aus deinem ersten Teil nicht hervor. lokal und feste IP ist ja nicht gleich remote und feste IP
http://msdn.microsoft.com/en-us/library/ms738520(v=vs.85).aspx
-
Also ich mache das immer ungefähr so:
hostent *ip; char IP_Adr[25]; ip = gethostbyname("mein.test.domain.com"); sprintf(IP_Adr, "%u.%u.%u.%u", (unsigned char) ip->h_addr_list[0][0], (unsigned char) ip->h_addr_list[0][1], (unsigned char) ip->h_addr_list[0][2], (unsigned char) ip->h_addr_list[0][3]); addr.sin_family=AF_INET; addr.sin_port=htons(4000); addr.sin_addr.s_addr = inet_addr(IP_Adr);
-
struct hostent *host_entry; .. host_entry = gethostbyname("www.foobar.baz") .. sock_addr.sin_addr = *(struct in_addr*)host_entry->h_addr; ..
Wobei gethostbyname() wohl deprecated ist und man getaddrinfo() nutzen soll.. (MSDN: http://msdn.microsoft.com/en-us/library/ms738520(v=vs.85).aspx)
Weis aber nicht ob das ganze dann noch Plattformunabhängig ist.. und wenn ich ehrlich bin nehme ich auch immer noch gethostbyname()
Edit:
Gehört im übrigen wohl eher in ein System-Forum (WinAPI/UNIX)