All pastes #2102835 Raw Edit

Unnamed

public text v1 · immutable
#2102835 ·published 2012-01-13 20:55 UTC
rendered paste body
// 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;

}