/* midterm-ex05.c */ #include #include #include #include #include #include #include #include #include #define HOSTNAME "localhost" #define PORT 8111 int main( int argc, char *argv[] ) { if ( argc != 2 ) { fprintf( stderr, "ERROR: Invalid usage\n" ); fprintf( stderr, "USAGE: %s \n", argv[0] ); return EXIT_FAILURE; } int fd = open( argv[1], O_RDONLY ); if ( fd < 0 ) { perror( "open() failed" ); return EXIT_FAILURE; } int sock = socket( PF_INET, SOCK_STREAM, 0 ); if ( sock < 0 ) { perror( "socket() failed" ); return EXIT_FAILURE; } struct sockaddr_in server; struct hostent * hp; server.sin_family = PF_INET; hp = gethostbyname( HOSTNAME ); if ( hp == NULL ) { perror( "Unknown host" ); return EXIT_FAILURE; } bcopy( (char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length ); int port = PORT; server.sin_port = htons( port ); if ( connect( sock, (struct sockaddr *)&server, sizeof( server ) ) < 0 ) { perror( "connect() failed" ); return EXIT_FAILURE; } /* read from file and send bytes to server */ int bytes; char buffer[1024]; while ( ( bytes = read( fd, buffer, 1024 ) ) > 0 ) { /* write a message out on the socket connection */ int n = write( sock, buffer, bytes ); if ( n < bytes ) { perror( "write() failed" ); return EXIT_FAILURE; } } close( fd ); /* read and display bytes received from server */ while ( ( bytes = read( sock, buffer, 1024 ) ) > 0 ) { if ( bytes < 1 ) { perror( "read() failed" ); return EXIT_FAILURE; } else { buffer[bytes] = '\0'; printf( "%s", buffer ); fflush( stdout ); } } close( sock ); return EXIT_SUCCESS; }