Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napisz programy, które prześlą plik o rozmiarze większym od 1 MiB między
- dwoma komputerami, z użyciem protokołu TCP/IP. Sprawdź , co się stanie, jeśli
- plik będzie wysyłany w jednym komunikacie.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <string.h>
- #define FILENAME "received_file"
- #define SERVER_PORT 1919
- #define MAX_CLIENTS 5
- void error_handler(const char *msg)
- {
- perror(msg);
- exit(EXIT_FAILURE);
- }
- int main(void)
- {
- int server_socket, client_socket;
- struct sockaddr_in server_addr, client_addr;
- socklen_t addrlen = sizeof(struct sockaddr);
- int file_size, remain_data;
- char buffer[BUFSIZ];
- ssize_t length;
- int fd;
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(SERVER_PORT);
- server_addr.sin_addr.s_addr = INADDR_ANY;
- memset(server_addr.sin_zero, '\0', 8);
- if((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- error_handler("socket");
- if(bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
- error_handler("bind");
- if(listen(server_socket, MAX_CLIENTS) == -1)
- error_handler("listen");
- printf("Oczekiwanie na polaczenie klienta...\n");
- if((client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addrlen)) == -1)
- error_handler("accept");
- printf("Klient polaczyl sie z serwerem!\n");
- if(recv(client_socket, buffer, BUFSIZ, 0) == -1)
- error_handler("read");
- file_size = atoi(buffer);
- printf("Odbieram plik o rozmiarze %d bajtow...\n", file_size);
- if((fd = open(FILENAME, O_RDWR | O_CREAT, 0755)) == -1)
- error_handler("open");
- remain_data = file_size;
- memset(buffer, '\0', BUFSIZ);
- while(((length = recv(client_socket, buffer, BUFSIZ, 0)) > 0) && (remain_data > 0)) {
- if(write(fd, buffer, length) == -1)
- error_handler("write");
- remain_data -= length;
- }
- if(length == -1)
- error_handler("recv");
- printf("Pomyslnie odebrano plik!\n");
- if(close(server_socket) == -1)
- error_handler("close");
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement