summaryrefslogtreecommitdiffstats
path: root/Bachelor/Verteilte Systeme/Praktikum1/tcpcli.cpp
blob: ac10492db1cff50447eca85808e83dfa092d2f4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/************************************************************************
 *
 * Example of client using TCP protocol.
 *
 ***********************************************************************/
#include <unistd.h>
#include "inet.h"
#include "error.cpp"
#include "util.cpp"
#include <iostream>
using namespace std;

const int MAXLINE=255; // max length of a line

// send message msg to server and receive response in resp
void mySend(int sockfd, char *msg, char *resp) {


	int n; // L�nge des Strings
	// Daten senden
	n = strlen(msg);
	if (writen(sockfd, msg, n) != n)
		err_sys("str_cli: writen error on socket"); // Fehler beim Schreiben

	// Daten empfangen
	n = readline(sockfd, resp, MAXLINE);
	if (n < 0)
		err_dump("str_cli: readline error");
	resp[n] = 0;	/* null terminate */
}


void str_cli(FILE *fp, int sockfd)
{
	int	n;
	char	sendline[MAXLINE], recvline[MAXLINE + 1];



	// Auswahl der Optionen (Eintragen / Suchen)
	int m_Auswahl = '0';

	while (true) {

		cout<<"Telefonbuch\n\nBitte ausw�hlen:\n";
		cout<<" 1: eintragen\n";
		cout<<" 2: suchen\n";
		cout<<" 3: beenden\n";
		cin>>m_Auswahl;
		switch (m_Auswahl) {
			case (1):
				// Neuen Eintrag im Telefonbuch
				cout<<"Eintragen:\n";
				char m_Name[50];
				char m_Tel[50];

				cout<<"Name: ";  scanf("%s", &m_Name);  strcat(m_Name, "\n");
				cout<<"Tel: ";   scanf("%s", &m_Tel);   strcat(m_Tel, "\n");

				mySend(sockfd, "addEntry\n", recvline);
				if (strcmp(recvline,"OK\n") != 0)
					printf("Error: %s\n", recvline);
				mySend(sockfd, m_Name, recvline);
				if (strcmp(recvline,"OK\n") != 0)
					printf("Error: %s\n", recvline);
				mySend(sockfd, m_Tel, recvline);
				if (strcmp(recvline,"OK\n") != 0)
					printf("Error: %s\n", recvline);
				break;
			case (2):
				// Eintrag im Telefonbuch suchen
				cout<<"Suchen\n";
				char m_Search[50];
				cout<<"Name: ";  scanf("%s", &m_Search);  strcat(m_Search, "\n");

				mySend(sockfd, "searchEntry\n", recvline);
				if (strcmp(recvline,"OK\n") != 0)
					printf("Error: %s\n", recvline);
				mySend(sockfd, m_Search, recvline);
				printf("Ergebnis: %s\n", recvline);

				break;
			case (3):
				mySend(sockfd,"end\n",recvline);
				cout<<"Client beendet...\n";
				return;
				break;
			default:
				cout<<"Falsche Eingabe\n";
				break;
		}
	}


}
/***********************************************************************/

/************************************************************************
 * main function, client for TCP/IP echo server
 */
int main(int argc, char** argv)
{
	int			sockfd;
	struct sockaddr_in	serv_addr;

	pname = argv[0];

	// Fill in the structure "serv_addr" with the address of the
	// server that we want to connect with.
	bzero((char *) &serv_addr, sizeof(serv_addr));
	serv_addr.sin_family      = AF_INET;
	serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR);
	serv_addr.sin_port        = htons(SERV_TCP_PORT);

    // Open a TCP socket (an Internet stream socket).
	if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		err_sys("client: can't open stream socket");

	// Connect to the server.
	if (connect(sockfd, (struct sockaddr *) &serv_addr,
							sizeof(serv_addr)) < 0)
		err_sys("client: can't connect to server");

	str_cli(stdin, sockfd);		/* do it all */

	close(sockfd);
	exit(0);
}
/***********************************************************************/