#include #include #include #include #include #include #include #include #include #define BUFSIZE 2048 #define USAGE "usage: client [hostname] [port] [dir...] \n" #define PORT 2488 #define massert( _eq, _msg ) \ if( _eq ) { \ perror( _msg ); \ exit(-1); \ } int main( int argc, char* argv[] ) { int s_sock, i, len, ret = 1; struct sockaddr_in saddr; char buf[BUFSIZE]; short port; if( argc < 3 ) { fprintf( stderr, USAGE ); exit( -1 ); } if(sscanf( argv[2], "%d", &port) < 0) { fputs( USAGE, stderr ); exit(-1); } massert( (s_sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0, "socket" ); memset( &saddr, 0, sizeof( struct sockaddr_in ) ); saddr.sin_family = AF_INET; saddr.sin_port = htons( port ); massert( inet_aton( argv[1], &saddr.sin_addr ) < 0, "inet_addr" ); massert( connect( s_sock, (struct sockaddr*)&saddr, sizeof(saddr)) < 0, "connect"); ret = 1; for( i = 3; i < argc; i ++ ) { memset( buf, 0 , BUFSIZE ); sprintf( buf, "%s", argv[i]); massert(write( s_sock, buf, strlen(buf)+1) < 0, "write" ); while( ret && (len = read( s_sock, buf, BUFSIZE )) > 0 ) { if( buf[len-1] == '\0') { ret = 0; } write( 1, buf, len ); } ret = 1; } close( s_sock ); return 0; }