Ciao Ulysses,
premetto che il tuo client funziona e per dimostrartelo l'ho modificato sul'host, la porta (necessariamente), aggiunto le funzioni necessarie alla compilazione... insomma l'ho reso compilabile.
src:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/types.h>
#include <netdb.h>
#define HOST "localhost"
#define PORT 12345
void serrore (const char *s, int id)
{
fprintf (stderr,"%s id=%d\n",s,id);
}
int main(){
int sock;
struct sockaddr_in sock_h;
struct hostent *host;
host = gethostbyname(HOST);
//Creo socket
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
serrore("Creazione socket fallita.", sock);
//Connessione
sock_h.sin_family = AF_INET;
sock_h.sin_port = htons(PORT);
sock_h.sin_addr = *(struct in_addr *)host->h_addr;
printf("Connessione in corso...");
if( connect(sock, (struct sockaddr *)&sock_h, sizeof(struct sockaddr) ) == -1)
serrore("Connessione socket fallita.", sock);
printf("CONNESSO\n");
//Invio messaggi
char *rsp = (char *)malloc(10000);
char *msg = (char *)malloc(1024);
int x;
while (1){
x = recv(sock, rsp, 10000, 0);
if(x == 0 || x == -1)
serrore("Ricezione fallita. Chiusura.", sock);
printf("\nSERVER #=> %s\n\n", rsp);
printf("CLIENT #=> ");
fgets(msg,1024,stdin);
if( (send(sock, msg, strlen(msg), 0)) == -1)
serrore("Invio fallito.",0);
}
shutdown(sock, 2);
free (msg);
free (rsp);
return 0;
}
Come dummy server tcp uso
netcat
term1
max@studio:~> nc -l localhost -p 12345
HELO
term2
max@studio:~> gcc prova.c -Wall -g
max@studio:~> netstat -apn | grep 12345
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN 8886/nc
max@studio:~> ./a.out
Connessione in corso...CONNESSO
SERVER #=> HELO
CLIENT #=> I GOT IT!
term1
max@studio:~> nc -l localhost -p 12345
HELO
I GOT IT!