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