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