forked from s444341/Projekt_SIK
comit
This commit is contained in:
parent
3010b45e05
commit
4ff56f2636
177
server/server.c
177
server/server.c
@ -1,177 +0,0 @@
|
|||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
struct client_socket
|
|
||||||
{
|
|
||||||
int socket;
|
|
||||||
struct sockaddr_in accept_adr;
|
|
||||||
//char name[20] = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
struct sockaddr_in bind_adr;
|
|
||||||
int socket_bind;
|
|
||||||
char msg[1024];
|
|
||||||
struct client_socket client[7];
|
|
||||||
fd_set Clients;
|
|
||||||
fd_set Socket;
|
|
||||||
socklen_t dl = sizeof(struct sockaddr_in);
|
|
||||||
int temp_accept;
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
char ff;
|
|
||||||
int max_fd;
|
|
||||||
struct timeval timeout;
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
timeout.tv_usec = 0;
|
|
||||||
|
|
||||||
//Inicjalizacja Tablicy Klientów
|
|
||||||
for(i=0; i<=4; i++)
|
|
||||||
{
|
|
||||||
client[i].socket = 0;
|
|
||||||
}
|
|
||||||
printf("Tablica Klientow\n");
|
|
||||||
//INICJALIZACJA SERWERA
|
|
||||||
//Bind
|
|
||||||
socket_bind = socket(AF_INET, SOCK_STREAM, 0);
|
|
||||||
if(socket_bind < 0) {
|
|
||||||
printf("Error: Socket\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
printf("Socket\n");
|
|
||||||
//Adres
|
|
||||||
bind_adr.sin_family = AF_INET;
|
|
||||||
bind_adr.sin_port = htons(44444);
|
|
||||||
bind_adr.sin_addr.s_addr = INADDR_ANY;
|
|
||||||
|
|
||||||
if (bind(socket_bind, (struct sockaddr*) &bind_adr, sizeof(bind_adr)) < 0)
|
|
||||||
{
|
|
||||||
printf("Error: Bind\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
printf("Bind\n");
|
|
||||||
//Listen
|
|
||||||
if (listen(socket_bind, 10) < 0) { //listen
|
|
||||||
printf("Error: Listen\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
printf("Listen\n");
|
|
||||||
//printf("Inicjalizacja Zakończona\n");
|
|
||||||
|
|
||||||
//NASŁUCHIWANIE KLIENTÓW
|
|
||||||
while (1) {
|
|
||||||
//printf("-------------\nKolejna Iteracja\n--------------\n");
|
|
||||||
//Aktualizacja deskryptorów
|
|
||||||
max_fd = 0;
|
|
||||||
FD_ZERO(&Clients);
|
|
||||||
FD_ZERO(&Socket);
|
|
||||||
FD_SET(socket_bind, &Socket);
|
|
||||||
|
|
||||||
//Dodanie deskryptorów Klientów
|
|
||||||
|
|
||||||
//Sprawdzenie Poprawności
|
|
||||||
//printf("Przed Select\n");
|
|
||||||
//printf("Rozpoczecie:Select 1\n");
|
|
||||||
if(select(socket_bind+1, &Socket, NULL, NULL, &timeout) > 0) {
|
|
||||||
if (FD_ISSET(socket_bind, &Socket)) {
|
|
||||||
temp_accept = accept(socket_bind, (struct sockaddr*) &client[i].accept_adr, &dl);
|
|
||||||
//printf("Temp Accept: %i\n", temp_accept
|
|
||||||
//printf("Sprawdzam Clienta %i: %i\n", i, client[i].socket);
|
|
||||||
for(i=0;i<=4;i++){
|
|
||||||
//printf("Miejsce %i: %i\n", i, client[i].socket);
|
|
||||||
if (client[i].socket == 0){
|
|
||||||
client[i].socket = temp_accept;
|
|
||||||
//recv(client[i].socket, msg, 1024, 0);
|
|
||||||
//printf("Wiadomosc: %s\n", msg);
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
printf("Miejsce %i zajęte\n", i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=0;i<=4;i++) {
|
|
||||||
while(recv(client[i].socket, msg, 1024, 0)>0) {
|
|
||||||
printf("Wiadomosc: %s\n", msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//printf("Koniec:Select 1\n");
|
|
||||||
//Set Clients
|
|
||||||
//printf("Rozpoczęcie: Set Clients\n");
|
|
||||||
for(i =0; i<=4; i++){
|
|
||||||
|
|
||||||
if (client[i].socket > 0) {
|
|
||||||
FD_SET(client[i].socket, &Clients);
|
|
||||||
if(client[i].socket > max_fd) {
|
|
||||||
max_fd = client[i].socket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//printf("Koniec: Set Clients\n");
|
|
||||||
// printf("Wiadomość:%s\n", msg);
|
|
||||||
//PRZETWARZANIE WIADOMOŚCI
|
|
||||||
//printf("Rozpoczecie:Select 2\n");
|
|
||||||
if(select(max_fd+1, NULL, &Clients, NULL, &timeout) > 0) {
|
|
||||||
|
|
||||||
for(i=0;i<=4;i++){
|
|
||||||
if (FD_ISSET(client[i].socket, &Clients)) {
|
|
||||||
for(j=0;j<=4;j++) {
|
|
||||||
if(client[j].socket!=0) {
|
|
||||||
send(client[j].socket, msg, 1024, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
//printf("Koniec:Select 2\n");
|
|
||||||
/*for(i = 0; i<=4; i++)
|
|
||||||
{
|
|
||||||
if(client[i].socket != 0 && FD_ISSET(client[i].socket, &Clients))
|
|
||||||
{
|
|
||||||
|
|
||||||
//Co zrobić z wiadomością?
|
|
||||||
if (msg == "/EXIT") {
|
|
||||||
for(j=0;j<=4;j++) {
|
|
||||||
if(i == j && client[j].socket != 0) {
|
|
||||||
close(client[i].socket);
|
|
||||||
client[i].socket = 0;
|
|
||||||
printf("Ktoś wyszedł\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (msg == "/DOWNLOAD") {
|
|
||||||
//fork, który dostanie adres i plik i będzie zajmował się ściąganiem
|
|
||||||
//if(fork()==0) {
|
|
||||||
//send()
|
|
||||||
} else if (msg == "/SEND"){
|
|
||||||
//fork, który dostanie adres i plik i będzie zajmował się wysyłaniem
|
|
||||||
} else if (msg == "/EXIT_M" || msg == "/EXIT_M\n"){
|
|
||||||
for(j=0;j<=4;j++) {
|
|
||||||
if(client[j].socket != 0) {
|
|
||||||
close(client[i].socket);
|
|
||||||
client[i].socket = 0;
|
|
||||||
printf("User disconnected\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("Koniec Serwera\n");
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
for(j=0;j<=4;j++) {
|
|
||||||
if(i!=j && client[j].socket!=0) {
|
|
||||||
send(client[j].socket, &msg, 1024, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
271
server/server2.c
271
server/server2.c
@ -7,39 +7,65 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
struct client_socket
|
struct client_socket
|
||||||
{
|
{
|
||||||
|
//Do Dodania:
|
||||||
|
//Wiadomosci dla kazdego uzytkownika
|
||||||
|
//sockety do recv dla kazdego uzytkownika?
|
||||||
int socket;
|
int socket;
|
||||||
int socket2;
|
int socket_recv;
|
||||||
struct sockaddr_in accept_adr;
|
struct sockaddr_in accept_adr;
|
||||||
char message[1024] = "/EMPTY";
|
struct sockaddr_in recv_adr;
|
||||||
//char name[20] = "";
|
char msg[1024];
|
||||||
|
fd_set Client;
|
||||||
|
fd_set Client2;
|
||||||
|
char Ip[40];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
//ZMIENNE
|
//ZMIENNE
|
||||||
struct sockaddr_in bind_adr;
|
struct sockaddr_in bind_adr; //Glówny socket adres
|
||||||
int socket_bind;
|
struct sockaddr_in recv_adr;
|
||||||
char msg[1024];
|
struct sockaddr_in accept_temp_adr; //
|
||||||
struct client_socket client[7];
|
struct sockaddr_in pliki_adr;
|
||||||
fd_set Clients;
|
int pliki_socket;
|
||||||
fd_set Socket;
|
int socket_bind; //Główny socket
|
||||||
socklen_t dl = sizeof(struct sockaddr_in);
|
int socket_recv;
|
||||||
int temp_accept;
|
int accept_recv;
|
||||||
int i;
|
int accept_temp;
|
||||||
int j;
|
char msg[1024] = "Puste";
|
||||||
char ff;
|
char msg_copy[1024];
|
||||||
int max_fd;
|
struct client_socket client[7]; //Tablica Klientów
|
||||||
struct timeval timeout;
|
fd_set Socket; //Zbiór jednego deskryptora - głównego socketa
|
||||||
|
fd_set Recv;
|
||||||
|
socklen_t dl = sizeof(struct sockaddr_in); //Wielkość struktury
|
||||||
|
int i; //licznik
|
||||||
|
int j; //licznik
|
||||||
|
struct timeval timeout; //Po ilu sekundach select odpuści
|
||||||
timeout.tv_sec = 1;
|
timeout.tv_sec = 1;
|
||||||
timeout.tv_usec = 0;
|
timeout.tv_usec = 0;
|
||||||
|
|
||||||
|
//ZMIENNE DO WYSYLANIA PLIKOW
|
||||||
|
FILE* plik;
|
||||||
|
long read_plik;
|
||||||
|
long send_plik;
|
||||||
|
long wielkosc;
|
||||||
|
long razem;
|
||||||
|
int pliki_accept;
|
||||||
|
struct stat file_info;
|
||||||
|
char* token1;
|
||||||
|
char* token2;
|
||||||
|
char* token3;
|
||||||
|
char* token4;
|
||||||
|
|
||||||
//INICJALIZACJA: Tablica Klientów
|
//INICJALIZACJA: Tablica Klientów
|
||||||
for(i=0; i<=4; i++){
|
for(i=0; i<=4; i++){
|
||||||
client[i].socket = 0;
|
client[i].socket = 0;
|
||||||
|
strcpy(client[i].msg,"/EMPTY");
|
||||||
}
|
}
|
||||||
printf("INICJALIZACJA: Tablica Klientow\n");
|
printf("INICJALIZACJA: Tablica Klientow\n");
|
||||||
|
|
||||||
@ -53,14 +79,30 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
printf("INICJALIZACJA: Socket\n");
|
printf("INICJALIZACJA: Socket\n");
|
||||||
|
|
||||||
|
socket_recv = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if(socket_recv < 0) {
|
||||||
|
printf("Error: Socket_Accept\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
printf("INICJALIZACJA: Socket_Accept\n");
|
||||||
|
|
||||||
|
pliki_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (pliki_socket < 0) {
|
||||||
|
printf("Error: Socket_Pliki\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
//INICJALIZACJA: Adres
|
//INICJALIZACJA: Adres
|
||||||
bind_adr.sin_family = AF_INET;
|
bind_adr.sin_family = AF_INET;
|
||||||
bind_adr.sin_port = htons(44444);
|
bind_adr.sin_port = htons(44445);
|
||||||
bind_adr.sin_addr.s_addr = INADDR_ANY;
|
bind_adr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
recv_adr.sin_family = AF_INET;
|
||||||
|
recv_adr.sin_port = htons(44444);
|
||||||
|
recv_adr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
pliki_adr.sin_family = AF_INET;
|
||||||
|
pliki_adr.sin_port = htons(44446);
|
||||||
|
pliki_adr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
//INICJALIZACJA: Bind
|
//INICJALIZACJA: Bind
|
||||||
if (bind(socket_bind, (struct sockaddr*) &bind_adr, sizeof(bind_adr)) < 0){
|
if (bind(socket_bind, (struct sockaddr*) &bind_adr, sizeof(bind_adr)) < 0){
|
||||||
@ -69,7 +111,15 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
printf("INICJALIZACJA: Bind\n");
|
printf("INICJALIZACJA: Bind\n");
|
||||||
|
|
||||||
|
if(bind(socket_recv, (struct sockaddr*)&recv_adr, sizeof(recv_adr)) < 0) {
|
||||||
|
printf("Error: Bind Recv\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bind(pliki_socket, (struct sockaddr*)&pliki_adr, sizeof(pliki_adr)) < 0) {
|
||||||
|
printf("Error: Bind Pliki\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
//INICJALIZACJA: Listen
|
//INICJALIZACJA: Listen
|
||||||
if (listen(socket_bind, 10) < 0) {
|
if (listen(socket_bind, 10) < 0) {
|
||||||
@ -78,28 +128,51 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
printf("INICJALIZACJA: Listen\n");
|
printf("INICJALIZACJA: Listen\n");
|
||||||
|
|
||||||
|
if(listen(socket_recv, 10) < 0) {
|
||||||
|
printf("Error: Listen Recv\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(listen(pliki_socket, 10) < 0) {
|
||||||
|
printf("Error: Listen Pliki \n");
|
||||||
|
}
|
||||||
|
printf("Zaczynam Nasłuchiwanie...\n");
|
||||||
//NASŁUCHIWANIE KLIENTÓW
|
//NASŁUCHIWANIE KLIENTÓW
|
||||||
while (1) {
|
while (1) {
|
||||||
|
timeout.tv_sec = 1;
|
||||||
|
timeout.tv_usec = 0;
|
||||||
//INICJALIZACJA: Zbiór Deskryptorów
|
//INICJALIZACJA: Zbiór Deskryptorów
|
||||||
FD_ZERO(&Socket);
|
FD_ZERO(&Socket);
|
||||||
|
FD_ZERO(&Recv);
|
||||||
FD_SET(socket_bind, &Socket);
|
FD_SET(socket_bind, &Socket);
|
||||||
|
FD_SET(socket_recv, &Recv);
|
||||||
|
|
||||||
|
|
||||||
//SELECT - Sprawdzanie nowych połączeń
|
//SELECT - Sprawdzanie nowych połączeń
|
||||||
//Select sprawdza czy można na socketcie wykonać jakiś accept - sprawdza czy ktoś się chce połączyć
|
//Select sprawdza czy można na socketcie wykonać jakiś accept - sprawdza czy ktoś się chce połączyć
|
||||||
if(select(socket_bind+1, &Socket, NULL, NULL, &timeout) > 0) {
|
if(select(socket_bind+1, &Socket, NULL, NULL, &timeout) > 0) {
|
||||||
|
printf("Wykryto polaczenie\n");
|
||||||
if (FD_ISSET(socket_bind, &Socket)) {
|
if (FD_ISSET(socket_bind, &Socket)) {
|
||||||
temp_accept = accept(socket_bind, (struct sockaddr*) &client[i].accept_adr, &dl);
|
//printf("Rozpoczynam accept\n");
|
||||||
//Sprawdzenie na które miejsce w tablicy dopisać nowy gniazdo
|
//Sprawdzenie na które miejsce w tablicy dopisać nowy gniazdo
|
||||||
for(i=0;i<=4;i++){
|
accept_temp = accept(socket_bind,(struct sockaddr*)&accept_temp_adr, &dl);
|
||||||
|
//Sprawdzamy czy istnieje takie ip już
|
||||||
|
//Jeśli tak to odbierz wiadomość
|
||||||
|
//Porównaj wiadomość i zapisz na odpowiednim miejscu
|
||||||
|
//Jeśli nie to wstaw go w nastepne wolne miejsce
|
||||||
|
i = 0;
|
||||||
|
while(i<=4){
|
||||||
if (client[i].socket == 0){
|
if (client[i].socket == 0){
|
||||||
client[i].socket = temp_accept;
|
//printf("%s\n", inet_ntoa(temp_accept_adr.sin_addr));
|
||||||
|
client[i].socket = accept_temp;
|
||||||
|
client[i].accept_adr = accept_temp_adr;
|
||||||
|
FD_SET(client[i].socket, &client[i].Client);
|
||||||
|
printf("Dodano użytkownika %s na miejscu %i\n", inet_ntoa(client[i].accept_adr.sin_addr), i);
|
||||||
|
//strcpy(client[i].Ip, inet_ntoa(client[i].accept_adr.sin_addr));
|
||||||
|
i++;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
printf("Miejsce %i zajęte\n", i);
|
printf("Miejsce %i zajęte\n", i);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,26 +182,146 @@ int main(void) {
|
|||||||
|
|
||||||
//ZBIERANIE WIADOMOSCI
|
//ZBIERANIE WIADOMOSCI
|
||||||
//Przejrzymy całą tablicę klientów i z tych połączonych zbierzemy ich wysłane wiadomosci
|
//Przejrzymy całą tablicę klientów i z tych połączonych zbierzemy ich wysłane wiadomosci
|
||||||
for(i=0;i<=4;i++) {
|
if(select(socket_recv+1, &Recv, NULL, NULL, &timeout) > 0) {
|
||||||
if(client[i].socket != 0) {
|
printf("Wykryto wiadomosc\n");
|
||||||
//Odbierz tylko kiedy coś przesłali
|
accept_recv = accept(socket_recv, (struct sockaddr*)&recv_adr, &dl);
|
||||||
while(recv(client[i].socket, client[i].message, 1024, 0)>0) {
|
if(recv(accept_recv, msg, 1024, 0) > 0) {
|
||||||
printf("Wiadomosc od %i: %s\n",i, client[i].message);
|
//Sklonuj msg i tokenizuj trzy pierwsze słowa (1.user> 2.Down/upload 3.Sciezka do pliku)
|
||||||
|
printf("Zaczynam Kopiowac\n");
|
||||||
|
strcpy(msg_copy, msg);
|
||||||
|
printf("Kopia: %s\n", msg_copy);
|
||||||
|
printf("Tok1\n");
|
||||||
|
token1 = strtok(msg_copy, " ");
|
||||||
|
printf("Tok2\n");
|
||||||
|
token2 = strtok(NULL, " ");
|
||||||
|
printf("Tok3\n");
|
||||||
|
token3 = strtok(NULL, " ");
|
||||||
|
printf("Tok4\n");
|
||||||
|
token4 = strtok(NULL, " ");
|
||||||
|
printf("Wiadomosc od %s: %s\n",inet_ntoa(recv_adr.sin_addr), msg);
|
||||||
|
//porównuj po drugim tokenie
|
||||||
|
if(token2 == NULL) {
|
||||||
|
token2 = "Brak";
|
||||||
}
|
}
|
||||||
}
|
if (strcmp(token2, "/EXIT") == 0) {
|
||||||
}
|
printf("Odebrano /EXIT\n");
|
||||||
|
printf("token1:%s\n", token1);
|
||||||
|
printf("token2:%s\n", token2);
|
||||||
|
printf("token3:%s\n", token3);
|
||||||
|
printf("token4:%s\n", token4);
|
||||||
|
|
||||||
//WYSYŁANIE WIADOMOSCI
|
i = 0;
|
||||||
//Znów przejrzymy całą tablicę klientów i jeżeli mają jakąś nową, nie pustą wiadomość - wyślij do wszystkich innych
|
while(i<=4) {
|
||||||
for(i=0;i<=4;i++){
|
if(strcmp(client[i].Ip, inet_ntoa(recv_adr.sin_addr)) == 0) {
|
||||||
if(client[i].socket != 0) {
|
printf("Użytkownik %i wyszedł\n", i);
|
||||||
for(j=0;j<=4;j++) {
|
close(client[i].socket);
|
||||||
if(client[j].socket!=0 && client[i].message != "/EMPTY" && j!=i) {
|
}
|
||||||
send(client[j].socket, msg, 1024, 0);
|
i++;
|
||||||
|
}
|
||||||
|
} else if (strcmp(token2, "/DOWNLOAD") == 0){
|
||||||
|
printf("Odebrano /DOWNLOAD\n");
|
||||||
|
printf("token1:%s\n", token1);
|
||||||
|
printf("token2:%s\n", token2);
|
||||||
|
printf("token3:%s\n", token3);
|
||||||
|
printf("token4:%s\n", token4);
|
||||||
|
if(fork() == 0) {
|
||||||
|
pliki_accept = accept(pliki_socket, (struct sockaddr*)&pliki_adr, &dl);
|
||||||
|
if(token3 != NULL) {
|
||||||
|
|
||||||
|
if(stat(token3, &file_info) < 0) {
|
||||||
|
printf("Brak informacji o pliku");
|
||||||
|
wielkosc = 0;
|
||||||
|
wielkosc = htonl(wielkosc);
|
||||||
|
send(pliki_accept, &wielkosc, sizeof(long), 0);
|
||||||
|
} else {
|
||||||
|
wielkosc = htonl((long) file_info.st_size);
|
||||||
|
send(pliki_accept, &wielkosc, sizeof(long), 0);
|
||||||
|
wielkosc = file_info.st_size;
|
||||||
|
plik = fopen(token3, "rb");
|
||||||
|
razem = 0;
|
||||||
|
while(razem < wielkosc) {
|
||||||
|
read_plik = fread(msg, 1, 1024, plik);
|
||||||
|
send_plik = send(pliki_accept, msg, read_plik, 0);
|
||||||
|
if (read_plik != send_plik) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
razem += send_plik;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(plik);
|
||||||
|
}
|
||||||
|
close(pliki_accept);
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
printf("Niepoprawna wiadomosc\n");
|
||||||
|
wielkosc = 0;
|
||||||
|
wielkosc = htonl(wielkosc);
|
||||||
|
send(pliki_accept, &wielkosc, sizeof(long), 0);
|
||||||
|
close(pliki_accept);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (strcmp(token2, "/FILE") == 0) {
|
||||||
|
printf("Odebrano /FILE\n");
|
||||||
|
printf("token1:%s\n", token1);
|
||||||
|
printf("token2:%s\n", token2);
|
||||||
|
printf("token3:%s\n", token3);
|
||||||
|
printf("token4:%s\n", token4);
|
||||||
|
|
||||||
|
if(fork() == 0) {
|
||||||
|
pliki_accept = accept(pliki_socket, (struct sockaddr*)&pliki_adr, &dl);
|
||||||
|
if(token3 != NULL && token4 != NULL) {
|
||||||
|
//recv(pliki_socket, &wielkosc, sizeof(long), 0);
|
||||||
|
wielkosc = (long) token4;
|
||||||
|
if(wielkosc = ntohl(wielkosc) <= 0) {
|
||||||
|
printf("Błąd pobierania\n");
|
||||||
|
} else {
|
||||||
|
razem = 0;
|
||||||
|
plik = fopen(token3, "wb");
|
||||||
|
while(razem < wielkosc) {
|
||||||
|
read_plik = recv(pliki_socket, msg, 1024, 0);
|
||||||
|
if(read_plik < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fwrite(msg, 1, 1024, plik);
|
||||||
|
razem += read_plik;
|
||||||
|
}
|
||||||
|
fclose(plik);
|
||||||
|
}
|
||||||
|
close(pliki_accept);
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
printf("Niepoprawna komenda\n");
|
||||||
|
close(pliki_accept);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//fork
|
||||||
|
//accept
|
||||||
|
//Sprawdz wielkosc pliku
|
||||||
|
//Odbierz plik
|
||||||
|
//close(pliki_accept)
|
||||||
|
} else {
|
||||||
|
printf("Wysyłanie wiadomosci\n");
|
||||||
|
printf("token1:%s\n", token1);
|
||||||
|
printf("token2:%s\n", token2);
|
||||||
|
printf("token3:%s\n", token3);
|
||||||
|
printf("token4:%s\n", token4);
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
//Sprawdz kto jest podlaczony
|
||||||
|
while(i<=4) {
|
||||||
|
if(client[i].socket != 0) {
|
||||||
|
//Wyslij wiadowmosc
|
||||||
|
send(client[i].socket, msg, 1024, 0);
|
||||||
|
printf("Send wysłany");
|
||||||
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
client[i].message = "/EMPTY";
|
|
||||||
}
|
}
|
||||||
|
close(accept_recv);
|
||||||
}
|
}
|
||||||
}//while
|
}//while
|
||||||
|
printf("------------------------------------------------Koniec??\n");
|
||||||
}//main
|
}//main
|
||||||
|
Loading…
Reference in New Issue
Block a user