All pastes #2102836 Raw Edit

Unnamed

public text v1 · immutable
#2102836 ·published 2012-01-13 20:56 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 clientseite



#include <iostream>
#include <winsock2.h>
#include <string>
#include <stdio.h>


using namespace std;

int main()
{
    int tests, clientsocket;                                                        // Variable zum Testen
    WSAData wsaData;

    cout << "Winsock wird gestartet...\n";
    tests = WSAStartup(MAKEWORD(2, 2), &wsaData);                  		            //Winsock wird gestartet mit version 2.2
	if (tests == SOCKET_ERROR)						                                //Fehler überprüfung (Winsock)
    {
		cout << "Winsock wurde nicht gestartet.\n";
		return 0;
    }else
    {
        cout << "Winsock wurde gestartet.\n\n";
    }


    cout << "Client Socketerstellung... \n";
    clientsocket = socket( AF_INET, SOCK_STREAM, 0);                         // Erstelle Serversocket

    if (clientsocket == -1)                                                  // Fehlerabfrage Clientsocketerstellung
    {
        cout << "Error: Socket() hat nicht funktioniert.\n\n";
        return 0;
    } else
    {
        cout << "Clientsocketerstellung hat geklappt. \n\n";
    }



	string server_name = "localhost";	                                    // Finden eines entsprechenden Servers (localhost)
	struct hostent *host_entry;
	host_entry = gethostbyname(server_name.c_str());
	if(host_entry == NULL)
	{
        cout << "Keinen Server gefunden.\n";
		return 1;
	}
	else
	{
		cout << "Server gefunden.\n";
	}

    struct sockaddr_in server;
	memset(&server,0,sizeof(SOCKADDR_IN));                                  // Freimachen des Speichers, indem die Daten gespeichert werden


                                                                            // Serverdaten initialisieren
	server.sin_family=AF_INET;
	server.sin_port=htons(50000);
	server.sin_addr.s_addr = inet_addr("127.0.0.1");


	tests = connect(clientsocket,(sockaddr*)&server, sizeof(server));       // Verbinden mit Server
	if(tests == SOCKET_ERROR)
	{
		cout << "Verbinden fehlgeschlagen.\n";
		return 1;
	}
	else
	{
		cout << "Verbindung hergestellt.\n";
	}


    char buffer[100000];                                                            // Buffer zum Speichern/Übertragen der Daten aus recv
	for(int i=0; i<8; i++)
	{
	    cout <<"Ping\n";
		recv(clientsocket,buffer,sizeof(buffer),0);			          // Erhalte Daten vom Server... FIXME mit mehr Zeit: abgezählt nicht sehr sauber
		cout << buffer << endl;
	}

	int auswahl = -1;
	cout<< "Eingabe machen.:)";                                                        // Zum Asuwählen der Stadt nötig
	cin >> auswahl;
	while (auswahl <=0 && auswahl >=5)
	{
	    cin >> auswahl;
	    if (auswahl <=0 && auswahl >=5)                                      // Abfangen sinnloser Eingaben
	    {
	        cout << "Fehlerhafte Eingabe. Nochmal bitte. \n";
	    }
	}

    cout << "Ausgesuchte Stadt: " << auswahl;
    itoa(auswahl, buffer, 10);
    send(clientsocket, buffer, sizeof(auswahl), 0);                        // Sende gewählte Stadt

    recv(clientsocket, buffer, sizeof(buffer),0);			                // Erhalte Rückmeldung vom Server
	cout << buffer;

    recv(clientsocket, buffer, sizeof(buffer),0);			                // Erhalte Wetterdaten vom Server
	cout << buffer;

    return 0;
}