Abend, Christen!
Also, ich werde einfach nicht schlau, was da falsch sein könnte.
server.exe
client.exe
Ich starte server.exe. Keine Meldungen, ein Blinker.
OK, er läuft die Unendlichschleife...
Nun starte ich client.exe.
Verbunden und block ein Blinker.
Also nehme ich an, dass der client erfolgreich zum server verbudnen ist.
Nun ist in beiden Programmen bloß ein Blinker und das war's.
Sobald ich server.exe schliesse, steht in cleint.exe
"Server antwortet nicht"
Also nehme ich stark an, dass der Client dem Server erfolgreich hallo
zugesendet hat, der server empfängt es aber entweder nicht oder
antwortet nicht.
Der ganze Fehler muss irgendwo hier liegen:
Das scheint entweder nichts zu empfangen oder
nichts zurückzusenden.
Kann mir jemand helfen, wie das richtig geht?
danke.
/* edit */
Ich habe jetzt den Code zum Bug ausgrenzen folgendermaßen umgeändert:
Starte den Server, sehe ich das "hier müsste was kommen!", sobald
ich die client.exe starte. Der Request des Clienten kommt aber nicht rein...
Müsste es wohl am recv liegen.
Also, ich werde einfach nicht schlau, was da falsch sein könnte.
server.exe
Code:
#include <winsock2.h>
#include <iostream>
using namespace std;
int main (int argc, char* argv[]) {
WSADATA wdData;
if (WSAStartup(MAKEWORD(2, 0), &wdData) == INVALID_SOCKET) {
cout << "Konnte Winsock nicht initialisieren!" << endl;
return 256;
}
SOCKET sckSocket;
SOCKADDR_IN addrServer;
char Request[100];
addrServer.sin_addr.s_addr = INADDR_ANY; // listen on all IPs associated with this computer
addrServer.sin_port = htons(8899); // bind to port 8899
addrServer.sin_family = AF_INET;
if ((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
return 256;
if(bind(sckSocket, (SOCKADDR *) &addrServer, sizeof(addrServer)) == SOCKET_ERROR)
return 254;
if(listen(sckSocket, 4) == SOCKET_ERROR)
return 253;
while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
}
}
system ("PAUSE");
return 0;
}
client.exe
Code:
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
using namespace std;
int main (int argc, char *argv[]) {
/* Initialisiert Winsock. */
WSADATA wdData;
WSAStartup (MAKEWORD(2, 2), &wdData);
/* Buffer bereitstellen. */
SOCKET sckSocket;
SOCKADDR_IN addrServer;
string Request = "Hallo";
char Antwort[100];
/* Socket erstellen. programm beenden, falls nicht möglich. */
if ((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
cout << "Konnte keinen Socket erstellen!" << endl;
return 256;
}
/* Protokoll, Port und Zielserver angeben. */
addrServer.sin_family = AF_INET;
addrServer.sin_addr.s_addr = inet_addr("127.0.0.1");
addrServer.sin_port = htons(8899);
/* Socket zum Zielserver verbinden. Programm beenden, falls was schief ging. */
if (connect(sckSocket, (SOCKADDR *) &addrServer, sizeof(addrServer)) == SOCKET_ERROR) {
cout << "Konnte nicht zum Server verbinden!" << endl;
system ("PAUSE");
return 254;
}
/* Dem Zielserver ein hallo senden. Programm beenden, falls Server nicht empfangen will */
if (send(sckSocket, Request.c_str(), sizeof(Request), 0) <= 0) {
cout << "Server empfängt nichts!" << endl;
system ("PAUSE");
return 253;
}
/* Antwort ausgeben. Programm beenden, falls Server nichts schickt. */
if (recv(sckSocket, Antwort, sizeof(Antwort), 0) <= 0) {
cout << "Server antwortet nicht!" << endl;
system ("PAUSE");
return 252;
}
cout << "Request geschickt" << endl;
closesocket(sckSocket);
system ("PAUSE");
return 0;
}
Ich starte server.exe. Keine Meldungen, ein Blinker.
OK, er läuft die Unendlichschleife...
Nun starte ich client.exe.
Verbunden und block ein Blinker.
Also nehme ich an, dass der client erfolgreich zum server verbudnen ist.
Nun ist in beiden Programmen bloß ein Blinker und das war's.
Sobald ich server.exe schliesse, steht in cleint.exe
"Server antwortet nicht"
Also nehme ich stark an, dass der Client dem Server erfolgreich hallo
zugesendet hat, der server empfängt es aber entweder nicht oder
antwortet nicht.
Der ganze Fehler muss irgendwo hier liegen:
Code:
while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
}
Das scheint entweder nichts zu empfangen oder
nichts zurückzusenden.
Kann mir jemand helfen, wie das richtig geht?
danke.
/* edit */
Ich habe jetzt den Code zum Bug ausgrenzen folgendermaßen umgeändert:
Code:
while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
/* Bug ausgrenzen. */
cout << "hier müsste was kommen!" << endl;
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
}
}
Starte den Server, sehe ich das "hier müsste was kommen!", sobald
ich die client.exe starte. Der Request des Clienten kommt aber nicht rein...
Müsste es wohl am recv liegen.