if-else im Server oder switch ??
-
Hi Leute,
neues Problem :Ich habe jetzt nen Client und nen Server mit Hilfe von WinSock gebastelt.
Und wenn ich als Client was eingebe, antwortet der Server auch richtig dem Client. Ich will aber nun, dass wenn man im Client "shutdown" schreibt, der Server antworten soll: "PC wird heruntergefahren" und wenn man "abmelden" drückt, dann soll der User sich abmelden. Aber ich habe schon mit if-else versucht einzubauen, aber funzt net recht
Kann mir jemand helfen ? am besten mit switch, da der server mehrere anweisungen (1,2,3,4,5,usw..) bearbeiten muss.
Hier die Codes:server.cpp
Code:
/*Server: läuft über WinSock. Wartet auf Verbindung mit Client, antwortet mit Ausgabe*/ #include <windows.h> #include <winsock.h> #include <stdio.h> #include <iostream> using namespace std; //Prototypen int startWinsock(); void Shutdown(); void Neustart(); int main() { long rc; char bWort[256]; char bWort2[300]; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; // Winsock starten rc=startWinsock(); //Prüfen, ob es Fehler bei startWinsock() gibt if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; closesocket(acceptSocket); } else { printf("Winsock gestartet!\n"); } // Socket erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; closesocket(acceptSocket); } else { printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); //alles wird auf 0 gesetzt addr.sin_family=AF_INET; //Internet addr.sin_port=htons(1111); //Port 1111 wird geöffnet addr.sin_addr.s_addr=INADDR_ANY; // Wartet auf Ips, egal welche //Prüfen, ob bind funktioniert rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; closesocket(acceptSocket); } else { printf("Socket an port 1111 gebunden\n"); } //Prüfen, ob listen funktioniert rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; closesocket(acceptSocket); } else { printf("acceptSocket ist im listen Modus....\n"); } //Prüfen, ob Verbindung akzeptiert wird mit Hilfe von accept() connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); return 1; closesocket(acceptSocket); } else { printf("Neue Verbindung wurde akzeptiert!\n"); } // Daten austauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,bWort,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); break; } bWort[rc]='\0'; printf("Client sendet: %s\n",bWort); sprintf(bWort2,"Du hast geschrieben %s",bWort); rc=send(connectedSocket,bWort2,strlen(bWort2),0); } closesocket(acceptSocket); closesocket(connectedSocket); WSACleanup(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
Den Code des Clients braucht ihr net, da es über den Server laufen soll.
Bitte HELP
Könnt ihr mir den Quellcode so bearbeiten, dass, wenn man im CLient zB s eintippt, der Server antwortet: Rechner wird neugestartet!
-
nein ??
-
Hört sich schwer nach
www.c-worker.ch an also nix selber gebastelt.
Bei recv empfängst du doch die Daten-> Also den Buffer Auswertenif(Buff[0]==s) { send(s,"Computer urnterfahren",..,..); oder so... }
-
genau, aber sonst gibts dort keine hilfe
Ich werds mal so versuchen...
-
Hallo,
du koenntest dir eine std::map<std::string, std::string> deklarieren mit
std::map<befehl_moeglichkeiten_client, antwort_moeglichkeiten_server>.Bekommst du einen Befehl vom Client, kannst du so schauen, ob er in der
map ist und entsprechend senden:if(myMap.count(clientBefehl)) send(s, myMap[clientBefehl].c_str(), ...);
mfg
v R
-
ja, danke. so ca. hab ich es auch, nur mit strings
und funzt auch