commit dcbb6a49ce6220d5dbbb1a1a46aa276b29b83229 Author: Georg Reisinger Date: Sun Sep 27 14:18:26 2020 -0700 Server und Client SEND diff --git a/myclient.c b/myclient.c new file mode 100755 index 0000000..417aa13 --- /dev/null +++ b/myclient.c @@ -0,0 +1,104 @@ +/* myclient.c */ +#include +#include +#include +#include +#include +#include +#include +#include +#define BUF 1024 +#define PORT 6543 + +int main (int argc, char **argv) { + char* meinport = argv[2]; + int create_socket; + char buffer[BUF]; + struct sockaddr_in address; + int size; + + if( argc < 2 ){ + printf("Usage: %s ServerAdresse\n", argv[0]); + exit(EXIT_FAILURE); + } + + if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) == -1) + { + perror("Socket error"); + return EXIT_FAILURE; + } + + memset(&address,0,sizeof(address)); + address.sin_family = AF_INET; + address.sin_port = htons (*meinport); + inet_aton (argv[1], &address.sin_addr); + + + if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) == 0) + { + printf ("Connection with server (%s) established\n", inet_ntoa (address.sin_addr)); + size=recv(create_socket,buffer,BUF-1, 0); + if (size>0) + { + buffer[size]= '\0'; + printf("%s",buffer); + } + } + else + { + perror("Connect error - no server available"); + return EXIT_FAILURE; + } + + int last = 0; + int mode = 0; + char bufferString[1024]; + do { + char *p=getenv("USER"); + printf("\x1B[32m"); + printf("%s@%s:%d", p, inet_ntoa (address.sin_addr),ntohs(address.sin_port)); + if (strncmp (bufferString, "send", 4) == 0 || mode == 1){ + switch (last) + { + case 0: + last += 1; + mode = 1; + printf("\x1B[34m"); + printf("->SEND->Sender eingeben: \n"); + break; + case 1: + last += 1; + printf("\x1B[34m"); + printf("->SEND->Empfänger eingeben: \n"); + break; + case 2: + last += 1; + printf("\x1B[34m"); + printf("->SEND->Betreff eingeben: \n"); + break; + case 3: + last = 0; + mode = 0; + printf("\x1B[34m"); + printf("->SEND->Nachricht eingeben: \n"); + break; + } + }else if (strncmp (bufferString, "list", 4) == 0 ){ + printf("LIST wurde endlich erkannt!\n"); + }else if (strncmp (bufferString, "read", 4) == 0 ){ + printf("READ wurde endlich erkannt!\n"); + } else if (strncmp (bufferString, "del", 4) == 0 ){ + printf("DEL wurde endlich erkannt!\n"); + } + printf("\033[0;33m"); + printf("$ "); + printf("\x1B[37m"); + fgets (buffer, BUF, stdin); + strcpy(bufferString, buffer); + printf("%s", bufferString); + send(create_socket, buffer, strlen (buffer), 0); + } + while (strcmp (buffer, "quit\n") != 0); + close (create_socket); + return EXIT_SUCCESS; +} diff --git a/myserver.c b/myserver.c new file mode 100755 index 0000000..615cd67 --- /dev/null +++ b/myserver.c @@ -0,0 +1,115 @@ +/* myserver.c */ +#include +#include +#include +#include +#include +#include +#include +#include +#define BUF 1024 +#define PORT 6543 + +int main (int argc, char **argv) { + char* verzeichnis = argv[1]; + char* meinport = argv[2]; + printf("Mein server Verzeichniss: %s\n", verzeichnis); + printf("Mein server Port: %s\n", meinport); + int create_socket, new_socket; + socklen_t addrlen; + char buffer[BUF]; + int size; + struct sockaddr_in address, cliaddress; + + create_socket = socket (AF_INET, SOCK_STREAM, 0); + + memset(&address,0,sizeof(address)); + address.sin_family = AF_INET; + address.sin_addr.s_addr = INADDR_ANY; + address.sin_port = htons (*meinport); + + if (bind ( create_socket, (struct sockaddr *) &address, sizeof (address)) != 0) { + perror("bind error"); + return EXIT_FAILURE; + } + listen (create_socket, 5); + + addrlen = sizeof (struct sockaddr_in); + + while (1) { + printf("Waiting for connections...\n"); + new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen ); + if (new_socket > 0) + { + printf ("Client connected from %s:%d...\n", inet_ntoa (cliaddress.sin_addr),ntohs(cliaddress.sin_port)); + strcpy(buffer,"Welcome to myserver, Please enter your command:\n"); + send(new_socket, buffer, strlen(buffer),0); + } + char bufferString[BUF]; + int last = 0; + int mode = 0; + do { + size = read (new_socket, buffer, BUF-1); + if( size > 0) + { + buffer[size] = '\0'; + strcpy(bufferString, buffer); + + if (strncmp (bufferString, "send", 4) == 0 || mode == 1){ + switch (last) + { + case 0: + last += 1; + mode = 1; + printf("\x1B[34m"); + printf("->SEND:\x1B[33m %s\n", bufferString); + break; + case 1: + last += 1; + printf("\x1B[34m"); + printf("->SEND->Sender wurde eingegeben:\x1B[33m %s\n", bufferString); + break; + case 2: + last += 1; + printf("\x1B[34m"); + printf("->SEND->Empfänger wurde eingegeben:\x1B[33m %s\n", bufferString); + break; + case 3: + last += 1; + printf("\x1B[34m"); + printf("->SEND->Betreff wurde eingegeben:\x1B[33m %s\n", bufferString); + break; + case 4: + last = 0; + mode = 0; + printf("\x1B[34m"); + printf("->SEND->Nachricht wurde eingegeben:\x1B[33m %s\n", bufferString); + break; + } + }else if (strncmp (bufferString, "list", 4) == 0 ){ + printf("LIST wurde endlich erkannt!\n"); + }else if (strncmp (bufferString, "read", 4) == 0 ){ + printf("READ wurde endlich erkannt!\n"); + } else if (strncmp (bufferString, "del", 4) == 0 ){ + printf("DEL wurde endlich erkannt!\n"); + }else { + printf ("\x1B[33mBefehl wurde nicht erkannt: \x1B[31m%s\n", bufferString); + } + printf("\x1B[37m"); + } + else if (size == 0) + { + printf("Client closed remote socket\n"); + break; + } + else + { + perror("recv error"); + return EXIT_FAILURE; + } + } while ( strncmp (buffer, "quit", 4) != 0); + close (new_socket); + } + close (create_socket); + return EXIT_SUCCESS; +}