rendered paste body#include <sys/types.h>#include <sys/socket.h>#include <pthread.h>#include <string.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <sys/stat.h>#include <fcntl.h>#include <netinet/in.h>#include <ctype.h>#include <arpa/inet.h>int main (int argc, char **argv) { int sock; if ((argc != 4)||(atoi(argv[2])==0)) { fprintf(stderr,"Uzycie: %s host port nazwa_piku\n",argv[0]); return -1; } sock = socket(PF_INET6,SOCK_STREAM,0); if (sock == -1){ perror("socket"); return -1; } do { struct sockaddr_in6 sa; memset(&sa,0,sizeof(sa));// sa.sin6_len = sizeof(sa); sa.sin6_family = AF_INET6; sa.sin6_port = htons(atoi(argv[2])); if (inet_pton(AF_INET6,argv[1],&(sa.sin6_addr))!=1) { struct in_addr addr4; if (inet_pton(AF_INET,argv[1],&addr4)!=1) { fprintf(stderr,"zly adres: %s\n",argv[1]); return -1; } memset(&(sa.sin6_addr),0,sizeof(sa.sin6_addr)); sa.sin6_addr._S6_un._S6_u8[10] = 0xff; sa.sin6_addr._S6_un._S6_u8[11] = 0xff; memcpy(&addr4, &(sa.sin6_addr._S6_un._S6_u8[12]), sizeof(struct in_addr)); } // printf ("Connect\n"); fflush(stdout); if (connect(sock,(struct sockaddr *) &sa,sizeof(sa))!=0) { perror("connect"); return -1; } } while(0);// printf ("Write\n"); fflush(stdout); char *fn = argv[3]; unsigned int tosend = strlen(fn)+1; while (tosend>0) { int retval = write(sock,fn+((strlen(fn)+1)-tosend),tosend); if (retval < 0) return -1; tosend-=retval; } // printf ("Read\n"); fflush(stdout); const unsigned int bufsize = 20+sizeof(int); char buf[bufsize]; unsigned int counter = 0;// printf("Toreceive = %d\n",bufsize); fflush(stdout); while (counter<bufsize) { int retval = read(sock,buf+counter,bufsize-counter);// printf("retval = %d\n",retval); fflush(stdout); if (retval <= 0) return -1; counter+=retval; } int len; memcpy(&len,buf,sizeof(int)); len=ntohl(len); char *ptr=buf+sizeof(int); if (len == -1) printf("Brak takiego pliku\n"); else { printf("Plik istnieje, dlugosc = %d\n",len); unsigned int n; for (n=0;n<20;n++) if (isprint(*(ptr+n))) putchar(*(ptr+n)); else putchar('.'); putchar('\n'); } return 0;}