récemment, j'ai essayé de faire beaucoup avec les sockets C car c'est un langage dont j'ai besoin pour une utilisation future. Cependant, j'ai rencontré ce problème que je n'arrive pas à résoudre. J'ai fait à la fois le client et le serveur - malheureusement, les deux binaires refusent de se connecter entre eux. Ce que je veux dire c'est que je ne reçois aucune erreur quand j'exécute le binaire du serveur et le binaire du client dans une même machine, mais pas de connexion non plus. Des idées? Voici le code!Sockets C (Linux) ne se connecte pas
(. Ubuntu, les deux codes C compilés avec gcc, le serveur et le code client reçoit à l'intérieur de la même machine en 2 bornes)
server.c:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h> //inet_aton(), inet_ntoa() etc
#include <sys/types.h>
#include <netinet/in.h>
#define PORT 8000
#define ERROR perror("Something went wrong! => ");
#define BUFFERSIZE 256
int main()
{
int sockfd, client_socketfd;
int bytes_sent;
socklen_t sin_size;
struct sockaddr_in server_addr;
struct sockaddr_in connectedClient_addr;
char message[BUFFERSIZE] = "Welcome to the server!";
if((sockfd = socket(PF_INET, SOCK_STREAM ,0)) == -1) {
ERROR;
exit(-1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY; //Subject to change
if((bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr))) == -1) {
ERROR;
exit(-2);
}
if((listen(sockfd, 5)) == -1) {
ERROR;
exit(-3);
}
int addrlen = sizeof(connectedClient_addr);
if((client_socketfd = accept(sockfd, (struct sockaddr *)&connectedClient_addr, (socklen_t*)&addrlen)) == -1){
ERROR;
exit(-4);
}
printf("Got a connection from: %s at port: %d" , inet_ntoa(connectedClient_addr.sin_addr), PORT);
if((send(sockfd, &message, BUFFERSIZE, 0)) == -1) {
ERROR;
exit(-5);
}
close(sockfd);
close(client_socketfd);
return 0;
}
-
client.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define PORT 8000
#define ERROR perror("Something went wrong! =>");
#define BUFFERSIZE 256
int main()
{
int sockfd;
struct sockaddr_in client_addr;
char message[BUFFERSIZE] = "Successfully connected!";
int bytes_received, bytes_sent;
char buffer[BUFFERSIZE];
if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
ERROR;
exit(-1);
}
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(PORT);
client_addr.sin_addr.s_addr = INADDR_ANY;
if((connect(sockfd, (struct sockaddr*)&client_addr, sizeof(client_addr))) == -1) {
ERROR;
exit(-2);
}
if((bytes_received = recv(sockfd, &buffer, BUFFERSIZE, 0)) == -1) {
ERROR;
exit(-3);
}
printf("Received %d bytes:\n" , bytes_received);
printf("%s", buffer);
close(sockfd);
return 0;
}
Pour l'appel 'connect', vous devez spécifier une * adresse spécifique *. –
Sur cette ligne, dans le code client: 'client_addr.sin_addr.s_addr = INADDR_ANY;', vous avez essayé de connecter le client à n'importe quelle adresse. Vous devez spécifier l'adresse IP que vous souhaitez connecter – HatsuPointerKun
@HatsuPointerKun Merci, va essayer maintenant. – RamonSS