Client:
Codice: Seleziona tutto
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 4000
#define IP 15
int main(int argc, char** argv)
{
int sd, error;
struct sockaddr_in server_addr, mio_addr;
int mio_addr_len = sizeof(mio_addr);
char ip[IP] = "127.0.0.1";
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons((u_short)PORT);
server_addr.sin_addr.s_addr = (long)inet_addr(ip);
sd = socket(AF_INET, SOCK_STREAM, 0);
error = connect(sd, &server_addr, sizeof(server_addr));
if (error==0) {
printf("Connessione stabilita! \n");
getsockname(sd, &mio_addr, &mio_addr_len);
printf("Il mio port e': %i \n", ntohs(mio_addr.sin_port));
}
else
printf("Fallito!\n");
close(sd);
return 0;
}
Codice: Seleziona tutto
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 4000
#define MAXCONN 5
int main(int argc, char** argv)
{
int sd, new_sd;
struct sockaddr_in server_addr, client_addr;
int client_len=sizeof(client_addr);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons((u_short)PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
sd = socket(AF_INET, SOCK_STREAM, 0);
bind(sd, &server_addr, sizeof(server_addr));
listen(sd, MAXCONN);
printf("In attesa sul mio port %i \n", ntohs(server_addr.sin_port));
new_sd = accept(sd, &client_addr, &client_len);
printf("Ho accettato la connessione \n");
printf("dal client con port: %i \n", ntohs(client_addr.sin_port));
close(new_sd);
close(sd);
return 0;
}
E' ovvio che c'è un problema ma non riesco a capire qual'è!
Praticamente avvio il server, poi il client, e tutto fila liscio, comunicano; ritento subito dopo e la connessione non avviene più.
Qualcuno sa spiegarmi dove ho sbagliato?