<repo_name>Agusdld/conexiones<file_sep>/proceso1.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>

int main(void) {
	puts("hola soy el cliente"); /* prints !!!Hello World!!! */

	//creo la estructura con la direccion del servidor
	struct sockaddr_in direccionDelServidor;
	direccionDelServidor.sin_family = AF_INET;
	direccionDelServidor.sin_addr.s_addr = inet_addr("127.0.0.1");
	direccionDelServidor.sin_port = htons(5000);

	int cliente = socket(AF_INET, SOCK_STREAM, 0);//guardo el id del socket del cliente

	//me intento conectar, si falla la conexion(<0) manejo el error
	if (connect(cliente, (struct sockaddr*) &direccionDelServidor, sizeof(direccionDelServidor)) != 0){
		perror("No se pudo conectar");
	}
	/*
	while(1){
		char mensaje[1000];
		scanf("%s",mensaje);
		send(cliente,mensaje,strlen(mensaje),0);
	}
	 */
	send(cliente,"hola cliente",13,0);
	return 0;
}
<file_sep>/README.md
Crean 2 proyectos distintos, uno para cada proceso
copian el contenido de cada proceso en cada uno de los .c
abren 2 consolas
en la primera se mueven hasta el directorio donde tienen el proceso2.c
compilan: gcc proceso2.c -o proceso2
en la segunda consola se mueven hasta el directorio donde tienen el proceso1.c
compilan: gcc proceso1.c -o proceso1
vuelven a la consola 1 y ejecutan el proceso 2: ./proceso2
vuelven a la consola 2 y ejecutan el proceso 1: ./proceso1
El proceso2 se inicia y queda esperando a conexiones
Cuando inician el proceso1(cliente) se intenta conectar al proces2(server)
<file_sep>/proceso2.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>

int main(void) {
	puts("Soy el servidor"); /* prints !!!Hello World!!! */

	//creo el socket del server
	struct sockaddr_in direccionDelServidor;//estructura con el puerto en el que hay que escuchar
	direccionDelServidor.sin_family = AF_INET;
	direccionDelServidor.sin_addr.s_addr = INADDR_ANY;
	direccionDelServidor.sin_port = htons(5000);
	int servidor = socket(AF_INET, SOCK_STREAM, 0);//guardo el id del socket del servidor

	//para no tener que esperar 2min si el server se cierra mal
	int activado = 1;
	setsockopt(servidor,SOL_SOCKET,SO_REUSEADDR,&activado,sizeof(activado));

	//Asocia el soket con la direccion(8080) y evalúa que el perto no este ocupado
	if(bind(servidor,(void*) &direccionDelServidor,sizeof(direccionDelServidor)) != 0 ){
		perror("Falló el bind");
		return 1;
	}

	//pongo a escuchar al socket
	puts("estoy escuchando");
	listen(servidor,100);//el segundo valor es la cantidad de conexiones que puede recibir hasta ser aceptadas

	//acepto la conexion
	//esto tiene que quedar adentro de un if para filtrar conexiones no deseadas
	struct sockaddr_in dirCliente;
	unsigned int tamanioDireccionCliente;
	int cliente;
	if((cliente = accept(servidor,(void*) &dirCliente,&tamanioDireccionCliente))<0){
		perror("accept");
		return -1;
	}
	puts("conexion aceptada");
	//aceptada la conexion ya le puedo mandar un mensaje al cliente
	send(cliente, "h<NAME>",13,0);

	char* buffer = malloc(13);//buffer donde voy a almacenar lo que reciba
	int bytesRecibidos = recv(cliente, buffer, 13,0);//MSG_WAITALL
	if (bytesRecibidos <= 0 ){//devuelve negativo si hay un error del otro lado de la conexion
		perror("el cliente se desconecto");
		return 1;
	}

	//buffer[bytesRecibidos] = '\0';
	printf("me llegaron %d bytes con %s", bytesRecibidos, buffer);
	free(buffer);

	return 0;
}
