All pastes #564426 Raw Edit

SOE Lab8 cl.c

public c v1 · immutable
·published 2007-06-13 16:15 UTC
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;}