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 <sys/stat.h>
- #include <sys/sendfile.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <string.h>
- #define SERVER_IP "127.0.0.1"
- #define SERVER_PORT 1919
- void error_handler(const char *msg)
- {
- perror(msg);
- exit(EXIT_FAILURE);
- }
- int main(int argc, char *argv[])
- {
- if(argc != 2) {
- fprintf(stderr, "Niepoprawna liczba argumentow\nUzycie: %s [plik, ktory ma zostac przeslany na serwer]\n", argv[0]);
- return EXIT_FAILURE;
- }
- int client_socket;
- int fd;
- struct sockaddr_in server_addr;
- struct stat file_stat;
- char file_size[BUFSIZ];
- int remain_data, sent_bytes;
- off_t offset;
- if((fd = open(argv[1], O_RDONLY)) == -1)
- error_handler("open");
- if(fstat(fd, &file_stat) == -1)
- error_handler("fstat");
- sprintf(file_size, "%ld", file_stat.st_size);
- if(!inet_aton(SERVER_IP, &server_addr.sin_addr))
- error_handler("inet_aton");
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(SERVER_PORT);
- memset(server_addr.sin_zero, '\0', 8);
- if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- error_handler("socket");
- if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
- error_handler("connect");
- printf("Polaczono z serwerem!\n");
- if(send(client_socket, file_size, sizeof(file_size), 0) == -1)
- error_handler("write");
- printf("Wysylam plik o rozmiarze %ld bajtow...\n", file_stat.st_size);
- offset = 0;
- remain_data = file_stat.st_size;
- while(((sent_bytes = sendfile(client_socket, fd, &offset, BUFSIZ)) > 0) && (remain_data > 0))
- remain_data -= sent_bytes;
- if(sent_bytes == -1)
- error_handler("sendfile");
- printf("Pomyslnie wyslano plik!\n");
- if(close(client_socket) == -1)
- error_handler("close");
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment