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