#include #include #include #include #include #include #include #include #include #define PROMPT "-> " unsigned long resolveInput(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; } /*void fillbuf(void) { char nick[20]; char username[20]; char frt_field[20]; char snd_field[20]; printf("Nick :"); scanf("%s", &nick); printf("\n"); printf("Username :"); scanf("%s", &username); printf("\n"); printf("First field :"); scanf("%s", &frt_field); printf("\n"); printf("Second field :"); scanf("%s", &snd_field); printf("\n"); */ int main(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; }