Salve, ho scritto due sorgenti, uno client e uno server, in C e tramite le socket devono comunicare; la compilazione avviene senza errori e senza warning, ma al momento dell'esecuzione non so come fare in quanto gli eseguibili sono distinti.
Da terminale ho provato: ./client ./server (sia insieme, che in ordine diverso, che separatamente)
e in output ho da parte del client connessione fallita all'invoco della funzione connect()
e in output da parte del server ho un'attesa continua, penso sull'invocazione della funzione listen().
Quindi morale della favola il mio programma non va e non so come risolvere l'errore nel codice e se i comandi di esecuzione sono dati correttamente.

ringrazio a chi mi darà una mano perchè non so come uscirne.


Preciso che lancio i comandi da terminale e lavoro in ambiente linux-ubuntu.
codice:
//CLIENT.c 

//CLIENT
		

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{	/***** variabili per modulo client *******/

	struct sockaddr_in serverIP;	// mi serve per comunicare con taluno server
	int err_net;
	int err_id;
	int sk;	//n° socket
	
	char msg[26];		// scambio di messaggi
	char msg_R[] = "che data/ora sono?";
	int send_ok, rec_ok;	
	int ok = 1;
	
	int close_ok;
	

	//Creo socket tramite taluna primitiva 
	sk=socket(AF_INET, SOCK_STREAM, 0);		// fissa
	
	 if (sk==-1) // la primitiva in caso si errore ret -1
	{
		printf("Creazione socket fallito\n");
		exit(1);
	}
	
	// Assegnamento degli indirizzi
	memset(&serverIP, 0, sizeof(serverIP)); 		/* azzera la struttura*/
	serverIP.sin_family = AF_INET; 					/* IPv4 address */
	serverIP.sin_port = htons(1050);				/* network ordered */
	err_id = inet_pton(AF_INET, "127.0.0.1", &serverIP.sin_addr.s_addr);
	
	if (err_id==0) // la primitiva in caso si errore ret 0
	{
		printf("Indirizzamento fallito\n");
		exit(1);
	}
	
	// crea connessione 
	err_net=connect(sk, (struct sockaddr*) &serverIP, sizeof(serverIP));
	
	if (err_net==-1) // la primitiva in caso si errore ret -1
	{
		printf("Connessione fallita\n");
		exit(1);
	}
	
	while(ok==1)	
{	
	// invio richiesta data/ora
	send_ok = send(sk, (void *)msg_R, strlen(msg_R), 0);
	
	if (send_ok==-1 || send_ok < strlen(msg_R)) // la primitiva in caso si errore ret -1
	{
		printf("Invio di richiesta fallito, ritento\n");
	}
	else ok = 0;
}

	while(ok==0)
{	
	//ricevuta data/ora
	rec_ok = recv(sk, (void*)msg, sizeof(msg), MSG_WAITALL);
	
	if ( (rec_ok == -1) || rec_ok<sizeof(msg)) 
	{
		int okk = 1;
		printf("Packetloss, rinvio richiesta \n");
		
		while(okk == 1)	
		{	
			// invio richiesta data/ora
			send_ok = send(sk, (void *)msg_R, strlen(msg_R), 0);
	
			if (send_ok==-1 || send_ok < strlen(msg_R)) // la primitiva in caso si errore ret -1
			{
				printf("Invio di richiesta fallito, ritento\n");
			}
			else okk = 0;
		}
		
	}	
	else ok = 1;
}	
	printf("%s",msg);	// ricevuto e stampo a video
	
	close_ok = close(sk);	// chiudo il so_cke_t
	
	if (close_ok==-1) // la primitiva in caso si errore ret -1
	{
		printf("chiusura socket client fallito\n");
		exit(1);
	}
	
	return 0;
}
	



//SERVER.c
		

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

int main()	
{				/***** variabili per modulo server *******/

	struct sockaddr_in clientIP, myIP;	//serve per comunicare tramite indirizzo col client
	int err_bind;
	int err_listen;
	int err_accept;
	int sk_server;		//n° socket
	
	
	
	char msg[26];	// scambio di messaggi
	char msg_R[] = "che data/ora sono?";
	char m[50];
	int richiesta;
	int send_ok, rec_ok;	
	int ok = 1;
	time_t ora;
	
	int close_ok;
	socklen_t dim = sizeof(clientIP);
	
	//Creo socket tramite taluna primitiva 
	sk_server=socket(AF_INET, SOCK_STREAM, 0);		// fissa
	
	 if (sk_server==-1) // la primitiva in caso si errore ret -1
	{
		printf("Creazione socket fallito\n");
		exit(1);
	}
	
	// Assegnamento degli indirizzi al server
	memset(&myIP, 0, sizeof(myIP)); 					/* azzera la struttura*/
	myIP.sin_family = AF_INET; 						/* IPv4 address */
	myIP.sin_addr.s_addr = htonl(INADDR_ANY);		/* network ordered */
	myIP.sin_port=htons(1050);
	
	// connetto local_inf al socket creato
	err_bind = bind(sk_server, (struct sockaddr*) &myIP, sizeof(myIP));
	
	
	if (err_bind==-1) // la primitiva in caso si errore ret -1
	{
		printf("Connessione fallita\n");
		exit(1);
	}
	
	
	// server in ascolto su taluno socket
	err_listen = listen(sk_server, 5)	;			// 5 richieste da servire contemporaneamente
											// che vanno nella coda di buffer				
	
	if (err_listen==-1) // la primitiva in caso si errore ret -1
	{
		printf("Non ascolto\n");
		exit(1);
	}
	
	// accettazione della richiesta
	err_accept = accept(sk_server, (struct sockaddr*) &clientIP, &dim);
	
	if (err_accept==-1) // la primitiva in caso si errore ret -1
	{
		printf("Richiesta rifiutata \n");
		exit(1);
	}
	
	
	// ricezione di richiesta data/ora
	rec_ok = recv(sk_server, (void*)m, sizeof(msg_R), MSG_WAITALL);
	
	richiesta = strcmp(m, msg_R);
	
	if( (rec_ok == -1) || richiesta !=0) 
	{
		printf("Packetloss \n");
	}	
	else
	{
			// invio data/ora.

		time(&ora);
		ctime_r(&ora, msg);
	
		send_ok = send(sk_server, (void *)msg, strlen(msg), 0);
	
		while(ok == 1)
		{	
			if (send_ok==-1 || send_ok < strlen(msg)) //in caso si errore ret -1
			{
				printf("Invio fallito, ritento\n");
			}
			else ok = 0;
		}
	}
	
	
	close_ok = close(sk_server);
	
	if (close_ok==-1) // la primitiva in caso si errore ret -1
	{
		printf("chiusura socket server fallito\n");
		exit(1);
	}
	
	return 0;
}