NOWE POSTY | NOWE TEMATY | POPULARNE | STAT | RSS | KONTAKT | REJESTRACJA | Login: Hasło: rss dla

HOME » PROGRAMOWANIE SIECIOWE » ZALICZENIE - GWIAZDKA

Przejdz do dołu stronyStrona: 1 / 1    strony: [1]

zaliczenie - gwiazdka

  
mamci88
28.01.2012 15:46:55
Grupa: Użytkownik

Posty: 7 #852502
Od: 2011-11-6
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define BUFLEN 1000

struct KLIENT {
FILE *f;
long csock;
char login[256];
struct KLIENT *next;
} *klienci = NULL;

struct KLIENT * wezklienta(FILE *f) {
struct KLIENT *k = klienci;
while(k) {
if(k->f == f) return k;
k=k->next;
}
}

void dodajklienta(FILE *f, char *login, long csock) {
struct KLIENT *nowy = (struct KLIENT *) malloc(sizeof(struct KLIENT));
nowy->f = f;
nowy->csock = csock;
strcpy(nowy->login,login);
nowy->next = klienci;
klienci=nowy;

}

void usunklienta(FILE *f) {
struct KLIENT * k = klienci, *prev = NULL;
if(k->f == f) {
klienci=klienci->next;
free(k);
return;
}

while(k) {
if(k->f == f) {
prev->next = k->next;
free(k);
break;
}
prev = k;
k = k->next;
}
}

void *watek(void * arg) {
double wartosc,suma;
wartosc = 0;
suma = 0;
long csock = (long) arg;
FILE * f = fdopen(csock,"r");
fprintf(f,"Hello SDSLZ\n");
int logged = 0;

for(;oczko {
char linia[256],komenda[256],argument[256];
if(!fgets(linia,sizeof(linia),f)) break;
int n=strlen(linia);
if(n>0 && linia[0]=='/') {
// polecenie
int m=sscanf(linia,"/%s %s",komenda,argument);
if(m==1 && !strcmp(komenda,"help")) {
char buf[256];
sprintf(buf,"Help ?! WTF ?!\n");
write(csock,buf,strlen(buf));
continue;
}

if(m==2 && !strcmp(komenda,"login")) {
if (wezklienta(f)!=NULL) usunklienta(f);

logged=1;
dodajklienta(f,argument,csock);
continue;
}


if(m==1 && !strcmp(komenda,"logout")) {
char buf[256];
sprintf(buf,"Wylogowano\n");
write(csock,buf,strlen(buf));

usunklienta(f);
continue;
}
if(m==1 && !strcmp(komenda,"list")) {
printf("%s\n",komenda);
struct KLIENT *k = klienci;
while(k) {
char buf[256];

struct KLIENT *ja = wezklienta(f);
if (k->login==ja->login) sprintf(buf,"%s*\n",k->login);
else sprintf(buf,"%s\n",k->login);

write(csock,buf,strlen(buf));
k=k->next;
}
continue;
}
char buf[256];
sprintf(buf,"Nie rozumiem: %s",linia);
write(csock,buf,strlen(buf));

} else {
if(!logged) {
fprintf(f,"niezalogowany !!\n");
} else {
struct KLIENT *k = klienci;
struct KLIENT *ja = wezklienta(f);
while(k) {
char buf[256];
if (k->login!=ja->login ) {
sprintf(buf,"%s: %s\n",ja->login,linia);
write(k->csock,buf,strlen(buf));
}


k=k->next;
}
}
continue;
// dane
}

}
fclose(f);

}


main()
{
struct sockaddr_in server;
int sock, opt, n;
long csock;
char buf[BUFLEN];

double wartosc, suma;
sock = socket(AF_INET, SOCK_STREAM, 0);
opt = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
&opt, sizeof(opt));
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(99999);
if (bind(sock, (struct sockaddr *) &server,
sizeof(server))) {
perror("bind");
exit(1);
}
listen(sock, 5);

for (;oczko {
csock = accept(sock, NULL, NULL);
printf("Klient polaczony\n");
pthread_t tid;
pthread_create(&tid,NULL,watek, (void *) csock);
}
}

Przejdz do góry stronyStrona: 1 / 1    strony: [1]

  << Pierwsza      < Poprzednia      Następna >     Ostatnia >>  

HOME » PROGRAMOWANIE SIECIOWE » ZALICZENIE - GWIAZDKA

Aby pisac na forum musisz sie zalogować !!!


wyświetlaj tu swoją reklamę za darmo oraz promuj się w katalogu

TestHub.pl - opinie, testy, oceny