testsf_c.c revision 22853aae7d384d69ae53ca39496c68994b47725d
1 2/* 3 * Client for the send_file test program 4 * Syntax: testsf_c <server IP addr> <client_filename> <filename> <file length> 5 */ 6 7#include <stdio.h> 8#include <stdlib.h> 9#include <string.h> 10#include <sys/file.h> 11#include <netinet/in.h> 12#include <sys/socket.h> 13 14extern int errno; 15 16main(argc, argv) 17int argc; 18char *argv[]; 19 20{ 21 struct sockaddr_in sa; 22 int s, fd; 23 char *lp, *sp; 24 int i; 25 int nbyte; 26 char *serv_fname; 27 char *clnt_fname; 28 char rbuf[81]; 29 int flen, nlen; 30 int port; 31 32 /* open socket to server */ 33 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 34 printf("socket error = %d\n", errno); 35 exit(1); 36 } 37 38 clnt_fname = argv[3]; /* filename to create/ 39 serv_fname = argv[4]; /* filename to request */ 40 41 /* prepare to copy file from server to local machine */ 42 if ((fd = open(clnt_fname, O_CREAT | O_TRUNC | O_WRONLY)) < 0) { 43 printf("file open error = %d\n", errno); 44 close(s); 45 exit(1); 46 } 47 48 lp = argv[5]; /* get file size */ 49 flen = strtol(lp,(char **)NULL,10); 50 51 52 /* initialize request info: */ 53 rbuf[0] = '\0'; 54 sp = &rbuf[0]; 55 sp = strcat(sp, argv[5]); /* file size */ 56 sp = strcat(sp, "="); 57 sp = strcat(sp, argv[4]); /* requested file */ 58 59 printf("sp=%s\n",sp); 60 /* initialize server info to make the connection */ 61 sa.sin_family = AF_INET; 62 sa.sin_addr.s_addr = inet_addr(argv[1]); 63 port=atoi(argv[2]); 64 sa.sin_port = htons(port); 65 66 if ( connect(s, (struct sockaddr*) &sa, sizeof(sa) ) < 0 ) { 67 printf("connect error = %d\n", errno); 68 close(s); 69 exit(1); 70 } 71 72 /* send request info to server */ 73 if ((nbyte = write(s, rbuf, strlen(rbuf))) <= 0) { 74 printf("socket write error = %d\n", errno); 75 close(s); 76 exit(1); 77 } 78 79printf("client write %d bytes to server with contents %s\n", nbyte, rbuf); 80 81 nlen = 0; /* init size of info received */ 82 rbuf[0] = '\0'; 83 while ((nbyte = read(s, rbuf, 80)) >0) { /* receive info until EOF */ 84 nlen += nbyte; 85 if (write(fd, rbuf, nbyte) != nbyte) { 86 printf("Error writing to file %s on client\n",clnt_fname); 87 exit(1); 88 } 89 } 90 91 92 if (nlen != flen) { /* compare expected size with current size */ 93 printf("WRONG!!! nlen = %d, should be %d\n", nlen, flen); 94 exit (1); 95 } 96 else 97 printf("File %s received\n", serv_fname); 98 99 close(s); 100 close(fd); 101 exit(0); 102} 103