rendered paste body#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <unistd.h>#include <netdb.h>#define PROMPT "-> "unsigned longresolveInput(addr)const char* addr;{ unsigned long ip; struct hostent * rhost; ip = inet_addr(addr); if(ip != INADDR_NONE) return ip; rhost = gethostbyname(addr); if(!rhost) return (unsigned long)NULL; memcpy(&ip, rhost->h_addr, sizeof(unsigned long)); return ip;}intmain(argc,argv)int argc;char *argv[];{ int sockfd; struct sockaddr_in serv_addr; if( argc != 3 ) { printf("Usage : %s ip_addr port\n", argv[0]); exit(0); } printf("Opening socket ...\n"); bzero(&serv_addr, sizeof(serv_addr)); /* initialisation de la structure sockaddr_in */ serv_addr.sin_family = AF_INET; // IPv4 serv_addr.sin_addr.s_addr = resolveInput(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); /* ouverture socket */ if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("Socket Error\n"); exit(0); } /* mise en place de la connexion */ printf("Trying to connect on %s ...\n", argv[1]); if( connect( sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { printf("Connexion Error\n"); exit(0); } printf("Connected, getting info.\n"); while(1) { fd_set rset; FD_ZERO( &rset ); FD_SET( sockfd, &rset ); FD_SET( STDIN_FILENO, &rset ); if( select ( sockfd + 1, &rset, NULL, NULL, NULL ) == -1 ) { printf("Select error\n"); exit(0); } if( FD_ISSET( sockfd, &rset ) ) { int octets; unsigned char tampon[BUFSIZ]; octets = read( sockfd, tampon, sizeof(tampon)); if( octets == 0) { close( sockfd ); exit(0); } write( STDOUT_FILENO, tampon, octets ); } if( FD_ISSET( STDIN_FILENO, &rset ) ) { int octets; unsigned char tampon[BUFSIZ]; octets = read( STDIN_FILENO, tampon, sizeof(tampon)); if( octets == 0 ) { close( sockfd ); exit(0); } write( sockfd, tampon, octets); } } return 0;}