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;
}