Adicionales a Sockets 1
Que tal gente!
Este programa se conectara al puerto 3490 del host que especifiquemos. El programa servidor pueden escribirlo ustedes analizando lo que este cliente espera... O esperar hasta el proximo numero y ver el codigo del server. Pueden simular un programa servidor utilizando la utilidad netcat (netcat o nc, depende de la version y distribucion de tu GNU/Linux).
Las funciones y estructuras utilizadas las hemos visto en su mayoria en la primera parte de esta nota de Programacion de Sockets, y si tienen alguna duda pueden enviar un email a linux@tectimes.com o buanzo |ARROBA) buanzo.com.ar. No olviden que tienen disponible las paginas del manual. Si no comprenden una estructura, busquen que funcion es la que la utiliza, y vean la pagina del manual de dicha funcion.
El programa es muy simple y comun, no tiene nada de codigo raro, por lo que no creo que tengan dificultades. Ahora, el codigo fuente:
#include#include #include #include #include #include #include #include #include #define PUERTO 3490 #define TAMPKT 100 int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[TAMPKT]; struct hostent *he; struct sockaddr_in su_addr; printf("\nPrograma cliente TCP que se conecta al puerto especificado\n") printf("en el codigo fuente.\n"); printf("Perteneciente a USERS te da MAS del numero 1.3 de Linux USERS\n"); printf("de MP Ediciones. \n"); printf("Codigo fuente por Arturo \"Buanzo\" Busleiman \n\n"); if (argc != 2) { fprintf(stderr,"\nDebe ingresar host destino como primer (y unico) parametro.\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } su_addr.sin_family = AF_INET; su_addr.sin_port = htons(PORT); su_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(su_addr.sin_zero), 8); if (connect(sockfd, (struct sockaddr *) &su_addr,sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } if ((numbytes=recv(sockfd, buf, TAMPKT-1, 0)) == -1) { perror("recv"); exit(1); } buf[numbytes] = '\0'; printf("Se recibio: %s",buf); close(sockfd); return 0; }
Arturo "Buanzo" Busleiman
Linux USERS - Colaborador
buanzo EN buanzo.com.ar
