Compilati entrambi, senza errori, però non riesco a connetterli...
CLIENT:
codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 4000 //port pubblico del server
void addr_initialize(struct sockaddr_in*, int, long);
int main (int argc, char* argv[])
{
struct sockaddr_in server_addr;
struct sockaddr_in my_addr;
int my_addr_len = sizeof(my_addr);
int error;
int sd;
addr_initialize(&server_addr, PORT, (long)inet_addr(argv[1]));
sd = socket (AF_INET, SOCK_STREAM, 0);
error = connect(sd, /*(struct sockaddr*)*/&server_addr, sizeof(server_addr));
if(error==0){
printf("\nConnessione eseguita con successo\n");
getsockname(sd, &my_addr, &my_addr_len);
printf("Il port e' il numero %d", ntohs(my_addr.sin_port));
}
else{
printf(/*"%s",*/"\nRilevato errore: %i\n\n", error);
}
close(sd);
return 0;
}
void addr_initialize(struct sockaddr_in* indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
indirizzo->sin_port = htons((u_short)port);
indirizzo->sin_addr.s_addr = IPaddr;
}
SERVER:
codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PORT 4000
#define MAXCONN 5
/*struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};*/
void addr_initialize(struct sockaddr_in*, int, long);
int main(int argc, char* argv[])
{
int sd, new_sd, bind_result,listen_result;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int client_len = sizeof(client_addr);
addr_initialize(&server_addr, PORT, INADDR_ANY);
sd = socket(AF_INET, SOCK_STREAM, 0);
if (sd == -1)
{ printf("Rilevato errore di socket\n");
exit(0);
}
bind_result = bind(sd, (struct sockaddr*)&server_addr, sizeof(server_addr));
if (bind_result!=0)
{
printf("Rilevato errore di bind\n");
exit(0);
}
listen_result = listen(sd, MAXCONN);
new_sd = accept(sd, (struct sockaddr*)&client_addr, &client_len);
printf("Sono in attesa di connessione\nIl port del Client e' &d", ntohs(client_addr.sin_port));
close(new_sd);
close(sd);
return 1;
}
void addr_initialize(struct sockaddr_in* indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
indirizzo->sin_port = htons((u_short)port);
indirizzo->sin_addr.s_addr = IPaddr;
}
Eseguo il server:
codice:
[Kamui@localhost Server]$ ./server
Rilevato errore di bind
[Kamui@localhost Server]$
Eseguo il client:
codice:
[Kamui@localhost Client]$ ./client
Segmentation fault
[Kamui@localhost Client]$
A cosa è dovuto? dove sbaglio? :master: