/* echo-client-fdopen-one.c -- 文字列を送受信するクライアント(TCP/IP版) ~yas/syspro/ipc/echo-client-fdopen-one.c */ #include "coins-syspro.c" extern int echo_client_one( char *server, int portno, char *message ); extern int echo_send_request( FILE *out, char *message ); extern int echo_receive_reply( FILE *in, char buf[], int size ); int main( int argc, char *argv[] ) { char *server ; int portno ; char *message ; int err; if( argc != 4 ) { fprintf( stderr,"Usage: %s host port 'message'\n",argv[0] ); exit( -1 ); } server = argv[1] ; portno = strtol( argv[2],0,10 ); message = argv[3]; err = echo_client_one( server, portno, message ); return( err ); } #define BUFFERSIZE 1024 int echo_client_one( char *server, int portno, char *message ) { int sock ; FILE *in, *out ; char rbuf[BUFFERSIZE]; int res; sock = tcp_connect( server, portno ); if( sock<0 ) return( 1 ); if( fdopen_sock(sock,&in,&out) < 0 ) { fprintf(stderr,"fdooen()\n"); close( sock ); return( 1 ); } res = echo_send_request( out, message ); if( res < 0 ) { fprintf(stderr,"fprintf()\n"); fclose( in ); fclose( out ); return( 1 ); } printf("sent: %d bytes [%s\n]\n",res,message ); res = echo_receive_reply( in, rbuf, BUFFERSIZE ); if( res < 0 ) { fprintf(stderr,"fprintf()\n"); fclose( in ); fclose( out ); return( 1 ); } printf("received: %d bytes [%s]\n", res, rbuf ); fclose( in ); fclose( out ); return( 0 ); } int echo_send_request( FILE *out, char *message ) { int res; res = fprintf( out, "%s\n", message ); /* send a request with '\n' */ return( res ); } int echo_receive_reply( FILE *in, char buf[], int size ) { char *res; res = fgets( buf, size, in ); /* receive a reply message */ if( res ) return( strlen(buf) ); else return( -1 ); }