#include #include #include #include #include #include #include #include #include #define PORT 3490 #define MAXDATASIZE 100 int main( int argc, char *argv[] ) { int sockfd, numbytes; char buf[ MAXDATASIZE ]; struct sockaddr_in their_addr; if ( argc != 2 ) { fprintf( stderr, "usage: client hostip\n" ); exit( 1 ); } if ( ( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) { perror( "socket" ); exit( 1 ); } their_addr.sin_family = AF_INET; their_addr.sin_port = htons( PORT ); if ( inet_pton( AF_INET, argv[ 1 ], &their_addr.sin_addr ) <= 0 ) { perror( "inet_pton" ); exit( 1 ); } memset( &( their_addr.sin_zero ), '\0', 8 ); if ( connect( sockfd, ( struct sockaddr * )&their_addr, sizeof( struct sockaddr ) ) == -1 ) { perror( "connect" ); exit( 1 ); } { struct sockaddr_in name; int sin_size = sizeof( struct sockaddr_in ); if ( getsockname( sockfd, (struct sockaddr *) &name, &sin_size ) == -1 ) { perror( "getsockname" ); exit( 1 ); } printf( "client: connected using local %s:%d\n", inet_ntoa( name.sin_addr ), ntohs( name.sin_port ) ); } if ( ( numbytes = recv( sockfd, buf, MAXDATASIZE-1, 0 ) ) == -1 ) { perror( "recv" ); exit( 1 ); } buf[ numbytes ] = '\0'; printf( "Received: %s", buf ); close( sockfd ); return 0; } /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */