000
17.04.2008, 11:54 Uhr
~threadserver
Gast
|
Hallo,
Also ich habe mir ein Ziel gesetzt und zwar einen Server zu programmieren, welcher auf verschiedene Portranges auf Clients horcht. Sollte solch ein Client verbunden sein, soll es möglich sein vom Server aus dem client 3 verschiedene Befehle zu senden. (dir, whoami, help). Der Client selber ist schon komplett fertig programmiert und mit netcat getestet. Er funktioniert auch.
Beim Server jedoch habe ich meine Probleme, ich habe den komplett fertig jedoch, klappt das Befehle senden nicht. Wenn ich zuerst "dir" sende bekomme ich die korrekte antwort! Sende ich jetzt nochmals "dir" bekomme ich nur die halbe Ausgabe vom dir Befehl. Sende ich jetzt "whoami" bekomme ich alles. Jeder weitere Befehl jedoch, funktioniert nicht mehr. Sprich ich kann Ihn zwar senden, bekomme aber keine Ausgabe vom Client zurückgsendet!
Der Fehler liegt definitiv am Server und NICHT am Client, wie schon gesagt der Client funktioniert - getestet mit netcat. => Es muss am Server liegen.
Hier ist der Code:
Code: |
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <pthread.h> #include <time.h> #include <string.h> #include <sys/stat.h>
#define BUFFER_SIZE 1024 char *port; char command [2000]; int array[65535]; char in [10000]; char input_[10000]; int check = 0;
int connect_ (int port) { int s, c; struct sockaddr_in srv, cli; socklen_t cli_size;
s = socket(AF_INET, SOCK_STREAM, 0);
srv.sin_addr.s_addr = INADDR_ANY; srv.sin_port = htons( (unsigned short int) port); srv.sin_family = AF_INET;
if (bind(s,(struct sockaddr*) &srv, sizeof(srv)) == -1) { perror("bind() failed"); return 3; }
if (listen(s, 3) == -1) { perror("listen() failed"); return 4; }
for(;;) { cli_size = sizeof(cli); c = accept(s, (struct sockaddr *) &cli, &cli_size); printf("Client connected on Port: \n"); printf("%d\n", port); // Testen ob ein Befehl vorliegt! for (;;) { if (array[port] == 1) { array[port] = 0; send (c, command, strlen(command), 0); // Clear the fuck up :D // Warte auf Antwort check = recv(c, input_, sizeof(input_) -1, 0); if (check == -1) { printf("Error receiving\r\n"); } printf("%s", input_); int i = 0;
for (i = 0; i < 10000; i++) { command[i] = '\0'; in[i] = '\0'; input_[i] = '\0'; } } } // EOF //close(c); } }
void input () { int p_port;
for (;;) { scanf("%s", in); if (!strncmp(in, "use", 3)) { printf("Use command accepted, awaiting ID:\r\n"); // Jetzt lesen wir die Zahl ein! scanf("%s", in); printf("ID accepted, awaiting command:\r\n"); p_port = atoi(in); // Hier werden die Befehle erwartet for (;;) { scanf("%s", in); strcat (command, in); array[p_port] = 1; } } else { printf("Read the man page for more information\nHelp: use Port\r\n"); } //printf("%s", in); //printf("\r\n"); } }
int main (int argc, char* argv[]) { if (argc < 3) { printf("Usage: ./server Number_of_listen_sockets startportnumber\n\n"); return 1; } int k = atoi(argv[1]); int port = atoi(argv[2]); int i = 0; printf("%d\n", k);
for (i=0; i<k; i++) { printf("Creating Socket on Port "); printf("%d", port + i); printf("\n");
pthread_t tid; pthread_create(&tid, NULL, connect_, port+i); //connect_(port + i); //printf("%d", i); } // Creating main thread for IO pthread_t pid; pthread_create (&pid, NULL, input, NULL);
for (;;) { sleep(120); } }
|
Ich hoffe, dass mir jemand helfen kann,
Danke schonmals! |