Salve ragazzi, è una delle prime volte che scrivo dei socket in C, poiché li ho sempre scritti in python.
Ho creato un server e un client.
Il server funziona benissimo, mi ci posso connettere con netcat o altro e funziona.
Invece il client dà errore al momento del bind.
CLIENT:
SERVER:
Ho creato un server e un client.
Il server funziona benissimo, mi ci posso connettere con netcat o altro e funziona.
Invece il client dà errore al momento del bind.
CLIENT:
C:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERVER_PORT 1234
#define SERVER_IP "127.0.0.1"
int main() {
int sd;
struct sockaddr_in server, client;
if ((sd = socket(AF_INET, SOCK_STREAM, 0) <0)) {
printf("Errore nella creazione del socket!\n");
getchar();
exit(1);
} else {
printf("Socket creato!\n");
}
// struttura client
client.sin_family = AF_INET;
client.sin_addr.s_addr = htonl(INADDR_ANY);
client.sin_port = htons(0);
if ((bind(sd, (struct sockaddr *)&client, sizeof client)) <0) {
printf("Errore nel bind del socket!\n");
getchar();
exit(1);
} else {
printf("Bind del socket avvenuto con successo!\n");
}
//struttura server
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(SERVER_IP);
server.sin_port = htons(SERVER_PORT);
if(connect(sd, (struct sockaddr *)&server, sizeof(server))<0) {
printf("Connessione non riuscita!\n");
getchar();
exit(1);
} else {
printf("Connessione Riuscita!\n");
}
printf("\n");
close(sd);
return 0;
}
SERVER:
C:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
// Domini e address family
#include <netinet/in.h>
// Strutture dati per socket
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 1234
#define MAX 200
int main() {
int client_len;
struct sockaddr_in server,client;
int sd, fd; // sd = SocketDescription
char ricevuto[MAX];
if ((sd = socket(AF_INET,SOCK_STREAM,0)) <0) { // AF_INET = IPv4 / SOCK_STREAM = TCP/IP
printf("Errore nella creazione del socket!");
getchar();
exit(0);
} else {
printf("Server creato con successo!\n");
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(PORT);
if (bind(sd, (struct sockaddr *)&server,sizeof server)<0) {
printf("Errore nel bind del server!");
getchar();
exit(0);
} else {
printf("Bind del socket avvenuto con successo!\n");
}
listen(sd, 1); // 1(secondo parametro) = numero max di connessioni simultanee
printf("Server in ascolto...\n");
printf("\n\n");
client_len = sizeof client;
if ((fd = accept(sd, (struct sockaddr *)&client, &client_len)<0)) {
printf("Errore nella connessione con il client!");
getchar();
exit(0);
};
printf("Connessione Effettuata!\n");
printf("Ip client: %s\n", inet_ntoa(client.sin_addr));
printf("Porta: %d\n", PORT);
printf("\n");
close(fd);
return 0;
}