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