J'essaie en ce moment de faire une connexion client/serveur entre mon PC (serveur) et une Raspberry Pi (client). J'ai trouvé un code en C sur internet que j'ai un peu adapté et j'ai un problème pour lancer la partie serveur. J'utilise les sockets et j'ai toujours la même erreur au moment du binding (c'est l'erreur "Rejet de la requête" ligne 84). J'ai essayé plusieurs ports sans résultat. Des idées ?
/* Serveur utilisant TCP
Adapté de http://www.cs.rpi.edu/~moorthy/Courses/os98/Pgms/socket.html
A compiler avec:
g++ -o Serveur Serveur.c
./Serveur
Le serveur attend une demande de connexion d'un client.
Le serveur suppose que le client envoie des entiers positifs, et les renvoie multipliés par 2.
A la reception de -1, il ferme le socket
A la reception de -2, il quitte.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
void error(char *msg)
{
perror(msg);
exit(1);
}
int func(int a)
{
return 2*a;
}
void sendData(int sockfd, int x)
{
int n;
char buffer[32];
sprintf(buffer, "%d\n", x);
if((n=write(sockfd, buffer, strlen(buffer))) < 0)
error(const_cast<char*>("Erreur dans l'ecriture vers le socket"));
buffer[n] = '\0';
}
int getData(int sockfd)
{
char buffer[32];
int n;
if((n=read(sockfd,buffer,31)) < 0)
error(const_cast<char*>("Erreur lors de la lecture du socket"));
buffer[n] = '\0';
return atoi(buffer);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
int data;
printf("Port:");
scanf("%d", &portno);
printf("Utilisation du port #%d\n", portno);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
error(const_cast<char*>("Erreur lors de l'ouverture du socket"));
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
listen(sockfd, 5);
clilen= sizeof(cli_addr);
// Attente d'une connexion
while(1){
printf("Attente d'un nouveau client...\n");
if((newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t*) &clilen)) < 0)
error(const_cast<char*>("REJET de la requete"));
printf("Nouvelle communication etablie avec un client\n");
while(1){
// Attente d'un nombre de la part du client
data = getData(newsockfd);
printf("recu: %d\n", data);
if(data < 0)
break;
data = func(data);
// Envoi du nombre multiplie par 26
printf("envoi de: %d\n", data);
sendData(newsockfd, data);
}
close(newsockfd);
// Si le client envoie -2, arret de la boucle
if(data == -2)
break;
}
return 0;
}
- Edité par oleray 25 avril 2015 à 10:17:37
[Sockets] Serveur sur Raspberry Pi
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.