// Felix Rauchfuss, 2011
// Progamm zum Lernen von Client-Server Anwendungen
// Ein Clients soll einen Server nach dem Wetter in bestimmten Städten Fragen und dieser gibt die vorgespeicherten Wetterdaten telegrammartig zurück
// Main der Serverseite
#include <iostream>
#include <winsock2.h>
#include <string>
#include <stdio.h>
#include "include/serversocket.h"
using namespace std;
int main()
{
string wetter[6][2]=
{
{("Beenden"),
("Keine Daten angefordert")}, //Wetterdaten
{("Leipzig"),
("Sonnig, 20 Grad")},
{("Stuttgart"),
("Sonnig, 23 Grad")},
{("Hamburg"),
("Windig, 18 Grad")},
{("Erlangen"),
("Regen, 19 Grad")},
{("Konstanz"),
("Neblig, 24 Grad")}
};
cout << "Serversocket wird erstellt.\n";
serversocket serversocket;
cout << "Serversocket wird gebunden.\n";
if (serversocket.bindServersocket(50000))
{
cout << "Fehler beim Binden, Programm wird beendet. \n";
return 0;
}else
{
cout << "Serversocketbindung abgeschlossen.\n\n";
}
cout << "Serversocket startet Lauschen. \n";
if (serversocket.listenServersocket())
{
cout << "Fehler beim Starten des Lauschen des Serversockets, Programm wird beendet.";
return 0;
}else
{
cout << "Serversocket lauscht jetzt.\n\n";
}
string YN, wettervar; // YN: Fragen, wettervar: Variable für Textübergabe
cout << "Serversocket startet mit dem Warten auf Verbindung(en).\n";
for (;;) //Endlosschleife
{
cout << "Serversocket wartet auf Verbindung(en).\n";
int clientsocketkennung = serversocket.acceptServersocket();
if(clientsocketkennung == 0)
{
cout << "Fehler beim Verbinden, Programm wird beendet.\n";
return 0;
}else
{
cout << "Verbindung aufgebaut.\n\n";
}
cout << "\nEs wird gesendet:\n\n";
wettervar = "Willkommen bei der Wetterstation.\n";
cout << wettervar;
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0);
for (int i=0; i<=5; i++) //Sende alle Städtenamen aus
{
cout << i;
wettervar = ": " + wetter[i][0] + "\n";
cout << wettervar;
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0);
Sleep(10); // Nur ruhig Brauner
}
wettervar = "Stadtnummer aussuchen!\n\n"; // Belege wettervar mit Text
cout << wettervar; // Schreibe wettervar auf der Serverkonsole
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0); // Schreibe wettervar auf der Clientkonsole
char* buffer; // Buffer für Daten von recv
int tests=SOCKET_ERROR;
while (tests == SOCKET_ERROR) // Warte auf Antwort vom Client und schreibe sie in buffer
{
tests = recv(clientsocketkennung, buffer,4,0);
}
// Erwartete Antwort:
// Stadtzahl
wettervar = "Ausgesuchte Nummer: "; // Proberückgabe der ausgwählten Nummer
cout << wettervar;
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0);
cout << atoi(buffer);
send(clientsocketkennung, buffer, sizeof(buffer), 0);
if (atoi(buffer) >= 1 && atoi(buffer) <=5) // Mach was mit der ausgewählten Nummer
{
wettervar = "\nDas Wetter in " + wetter[atoi(buffer)][0] + " ist " + wetter[atoi(buffer)][1] + ".\n\n";
cout << wettervar;
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0);
}else
{
wettervar = "Nichts relevantes zur Zahl gefunden.\n\n";
cout << wettervar;
send(clientsocketkennung, wettervar.c_str(), sizeof(wettervar), 0);
}
cout << "Server beenden? (Y/N)"; //Beenden?
cin >> YN;
if (YN == "Y")
{
break;
}
}
if (serversocket.closeServersocket())
{
cout << "Fehler beim Beenden des Sockets, Programm wird beendet.";
return 0;
}
cout << "Programm wird beendet.\n";
return 0;
}