PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Socket über Internet/Netzwerk


Lenchen
25.06.2005, 19:12
Hallo coding-boardies

Ich beschäftige mich mit der Socketprogrammierung unter Windows (Windows XP, Compiler: Visual Studio.NET)
Bei c-worker.ch habe ich ein Tutorial gefunden, bei welchem der Server und der Client auf localhost laufen/connecten.

Will ich aber den Server auf einem anderen Computer (192.168.1.6) laufen lassen und von meinem PC(192.168.1.3) zum Server connecten will bekomme ich...

Beim Server:
FehlerCode 10054 (schnell nachgeschaut bedeutet "Eine vorhandene Verbindung wurde vom Remotehost geschlossen"

Beim Client:
FehlerCode 10060 ("Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat"

Vorher habe ich natürlich die IP's geändert. ;)

Beim Server ist addr.sin_addr.s_addr=INADDR_ANY;

Und beim Client vorübergehen noch HardCode addr.sin_addr.s_addr=inet_addr("192.168.1.6")

Firewall (auf einem PC) blockt nicht zeigt sogar eine aktive Verbindung an.

Woran könnte das liegen dass das nicht funktioniert?
Falls ihr noch mehr Code/Infos benötigt... einfach sagen ;)

Dankbar für jede Hilfe

Gruss Lenchen!


butterkeks
25.06.2005, 19:26
da bräuchte man schon etwas mehr code...
und welcher Aufruf schägt jeweils genau fehl?

Lenchen
25.06.2005, 19:36
Hallo

Also der Client quittiert, dass der connect() nicht funktioniert:
und so möchte ich das realisieren:
// Verbinden
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(12345);
addr.sin_addr.s_addr=inet_addr("192.168.1.6");

rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR)
{
printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
return 1;
}
else
{
printf("Verbunden mit 192.168.1.6..\n");
}

// Daten austauschen
while(rc!=SOCKET_ERROR)
{
cout << "\nZeichenfolge eingeben [max 256]: ";
cin >> buf;

send(s,buf,strlen(buf),0);

rc=recv(s,buf,256,0);

if(rc==0)
{
cout << "Server hat die Verbindung getrennt..\n";
break;
}
if(rc==SOCKET_ERROR)
{
cout << "Fehler: recv, fehler code:" << WSAGetLastError() << "\n";
break;
}
buf[rc]='\0';

cout << "\nServer antwortet: " << buf << "\n";
}


Der Server meldet (komischerweise), dass er die Verbindung akzeptiert... danach erhält der Server aber einen recv() error
/ Verbindung annehmen
connectedSocket=accept(acceptSocket,NULL,NULL);
if(connectedSocket==INVALID_SOCKET)
{
cout << "Fehler: accept, fehler code: " << WSAGetLastError() << "\n";
return 1;
}
else
{
cout << "Neue Verbindung wurde akzeptiert!\n";
}

// Daten austauschen
while(rc!=SOCKET_ERROR)
{
rc=recv(connectedSocket,buf,256,0);
if(rc==0)
{
cout << "Server hat die Verbindung getrennt..\n";
break;
}
if(rc==SOCKET_ERROR)
{
cout << "Fehler: recv, fehler code: " << WSAGetLastError() << "\n";
break;
}
buf[rc]='\0';

cout << "Client sendet: " << buf << "\n";

sprintf(buf2,"Du mich auch %s",buf);

rc=send(connectedSocket,buf2,strlen(buf2),0);
}

Anfangs dachte ich, ich hätte etwas mit den IP's nicht richtig gemacht... Der Server erlaubt alle IP's der Client will auf 192.168.1.6 verbinden...

Auf wunsch kann ich auch den gesamten Code posten... möchte dabei aber auch was lernen ;)

Danke und Gruss Lenchen

Lenchen
26.06.2005, 17:26
Problem gelöst...:) mein Router hat die ganze Zeit die Verbindung geblockt!
Hab den Port "geforwardet" und dann hat alles funktioniert

Gruss Lenchen