diff options
Diffstat (limited to 'app_example/func-test/file_transfer/server_filetrans.c')
-rw-r--r-- | app_example/func-test/file_transfer/server_filetrans.c | 344 |
1 files changed, 0 insertions, 344 deletions
diff --git a/app_example/func-test/file_transfer/server_filetrans.c b/app_example/func-test/file_transfer/server_filetrans.c deleted file mode 100644 index 9463c70..0000000 --- a/app_example/func-test/file_transfer/server_filetrans.c +++ /dev/null @@ -1,344 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <netdb.h> -#include <ctype.h> -#include <arpa/inet.h> -#include <fcntl.h> -char *END_FLAG = "=================END"; -#define HEXCONVERT_COLS 8 -#define HEX_CONVERT 1 -//#define DEBUG 1 -#define out(fmt, arg...) (void)printf(fmt, ##arg) - -#ifdef DEBUG -#define DBG(fmt, arg...) do { \ - out("[Debug] " fmt, ##arg); \ - } while (0) -#else -#define DBG(fmt, arg...) ((void)0) -#endif - -void -error (const char *msg) -{ - perror (msg); - out ("./server_tcp [server_ip_address] [port number]\n"); - exit (1); -} - -#if defined(HEX_CONVERT) && defined(DEBUG) -void -hexconvert (void *mem, unsigned int len) -{ - unsigned int i; - - for (i = 0; - i < - len + - ((len % HEXCONVERT_COLS) ? (HEXCONVERT_COLS - - len % HEXCONVERT_COLS) : 0); i++) - { - /* print offset */ - if (i % HEXCONVERT_COLS == 0) - { - DBG ("\n0x%06x: ", i); - } - - /*print hex data */ - if (i < len) - { - DBG ("%02x ", 0xFF & ((char *) mem)[i]); - } - else /* end of block, just aligning for ASCII dump */ - { - DBG ("\n"); - } - } -} -#endif -int -compareFiles (FILE * fp1, FILE * fp2) -{ - - char ch1 = getc (fp1); - char ch2 = getc (fp2); - int error = 0, pos = 0, line = 1; - - while (ch1 != EOF && ch2 != EOF) - { - pos++; - if (ch1 == '\n' && ch2 == '\n') - { - line++; - pos = 0; - } - - if (ch1 != ch2) - { - error++; - DBG ("Line Number : %d \tError" " Position :%d \n", line, pos); - } - - ch1 = getc (fp1); - ch2 = getc (fp2); - } - - //printf("Total Errors : %d\t", error); - return error; -} - -void -tcp (char **pArgv) -{ - - int sockfd, newsockfd, portno; - char buff[1024], filename[255]; - - struct sockaddr_in serv_addr, cli_addr; - socklen_t clilen; - - sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - { - error ("error in socket creation"); - } - out ("socket create successful\n"); - - bzero ((char *) &serv_addr, sizeof (serv_addr)); - portno = atoi (pArgv[2]); - - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = inet_addr (pArgv[1]); - serv_addr.sin_port = htons (portno); - - if (bind (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) - { - error ("bind fail"); - } - out ("Bind successful\n"); - listen (sockfd, 5); - clilen = sizeof (cli_addr); - - newsockfd = accept (sockfd, (struct sockaddr *) &cli_addr, &clilen); - if (newsockfd < 0) - { - error ("error in accept"); - } - out ("socket accept succesful\n"); - bzero (buff, 1024); - - FILE *fp; - int lSize = 0, totallSize = 0; - - bzero (filename, 255); - - fclose (fopen ("receive_file.txt", "w")); - if (system ("chmod +x *") == -1) - { - out (" incorrect use of system\n"); - } - fp = fopen ("receive_file.txt", "a"); - - if (read (newsockfd, &lSize, sizeof (int)) == -1) - { - out ("error executing read\n"); - } - if (read (newsockfd, filename, sizeof (filename)) == -1) - { - out ("error executing read\n"); - } - - while (lSize > totallSize) - { - int bytes_read = 0; - bzero (buff, 1024); - - bytes_read = read (newsockfd, buff, 1024); - - if (bytes_read == 0) - { - break; - } - - if (bytes_read < 0) - { - error ("error in Socket read.\n"); - } - -#if defined(HEX_CONVERT) && defined(DEBUG) - DBG ("=========================================\n"); - hexconvert (buff, bytes_read); - DBG ("=========================================\n"); -#endif -#ifdef DEBUG - DBG ("=========================================\n"); - puts ((const char *) buff); - DBG ("=========================================\n"); -#endif - totallSize += bytes_read; - - if (fwrite (buff, 1, bytes_read, fp) == -1) - { - error ("error in file write\n"); - } -//#if DEBUG - DBG - ("Total size of file = %d, Total Bytes sent to socket = %d, bytes_read in each step = %d\n", - lSize, totallSize, bytes_read); -//#endif - } - out ("file name = %s\n", filename); - out ("Final total size of file = %d, total read from socket = %d\n", lSize, - totallSize); - out ("copy complete\n"); - fclose (fp); - - FILE *fp1 = fopen ("receive_file.txt", "r"); - FILE *fp2 = fopen (filename, "r"); - - fseek (fp2, 0L, SEEK_END); - int lfile_size = ftell (fp2); - rewind (fp2); - if (lfile_size != lSize) - { - out ("Size unmatch...\n"); - } - else - { - out ("Size match...\n"); - } - - if (compareFiles (fp1, fp2) > 0) - { - out ("file unmatch...\n"); - } - else - { - out ("file match...\n"); - } - - close (newsockfd); - close (sockfd); - return; -} - -void -run (int sockfd, struct sockaddr *cliaddr, socklen_t clilen, char *res_buf, - int MAXLINE) -{ - int n, fd; - socklen_t len; - char *buf, *buf2; - FILE *fp1, *fp2; - buf = malloc (MAXLINE + 1); - len = clilen; - n = recvfrom (sockfd, buf, MAXLINE, 0, cliaddr, &len); - buf[n] = 0; - out ("Received from client:[%s] \n", buf); - buf2 = malloc (MAXLINE); - strcpy (buf2, buf); - sendto (sockfd, "ok", strlen ("ok"), 0, cliaddr, len); - fd = open (buf, O_RDWR | O_CREAT, 0666); - while ((n = recvfrom (sockfd, buf, MAXLINE, 0, cliaddr, &len))) - { - buf[n] = 0; - //out("%s", buf); - if (!(strcmp (buf, END_FLAG))) - { - break; - } - if (write (fd, buf, n) == -1) - { - out ("error in executing write\n"); - } - } - fp1 = fopen (buf2, "r"); - fp2 = fopen (res_buf, "r"); - - if (compareFiles (fp1, fp2) == 0) - { - out ("\nPass:The contents of the files are same"); - } - else - { - out ("\nFail:The contents of the files are different"); - } - close (fd); -} - -void -udp (char **pArgv) -{ - int sockfd, portno, MAXLINE; - struct sockaddr_in servaddr, cliaddr; - char *res_buf; - res_buf = pArgv[3]; - - portno = atoi (pArgv[2]); - MAXLINE = atoi (pArgv[4]); - sockfd = socket (AF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) - { - out ("error in socket creation\n"); - } - out ("socket create successful\n"); - - bzero (&servaddr, sizeof (servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = inet_addr (pArgv[1]); - servaddr.sin_port = htons (portno); - - if (bind (sockfd, (struct sockaddr *) &servaddr, sizeof (servaddr)) < 0) - { - out ("bind fail"); - } - out ("Binded successfully\n"); - fd_set read_fds; - FD_ZERO (&read_fds); - FD_SET (sockfd, &read_fds); - int fdmax = sockfd; - if (FD_ISSET (sockfd, &read_fds)) - { - run (fdmax, (struct sockaddr *) &cliaddr, sizeof (cliaddr), res_buf, - MAXLINE); - } - return; -} - -int -main (int argc, char *argv[]) -{ - int i, j; - char **pArgv; - pArgv = (char **) malloc (sizeof (char *) * 10); - for (i = 0; i < 10; i++) - { - pArgv[i] = (char *) malloc (sizeof (char) * 20); - } - if (strcmp ("tcp", argv[1]) == 0) - { - strcpy (pArgv[0], "tcp"); - /* The arguments of tcp are [server_ip_address] [port number] */ - for (i = 1; i < 3; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - tcp (pArgv); - } - else if (strcmp ("udp", argv[1]) == 0) - { - strcpy (pArgv[0], "udp"); - /* The arguments of udp are [server_ip_address] [port number] [filename] [MAX_BUFFER_LENGTH] */ - for (i = 1; i < 5; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - udp (pArgv); - } - - return 0; -} |