Application ethernet multi clients sous LINUX

Signaler
Messages postés
1
Date d'inscription
mardi 9 septembre 2014
Statut
Membre
Dernière intervention
9 septembre 2014
-
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
-
Bonjour tout le monde,

Je vous sollicite suite à un petit problème qui me bloque vraiment.
Je suis entrain de develloper une application ethernet : serveur multi-clients plus le programme des clients qui se connecte à ce serveur.

Mon problème est le suivant : J'arrive pas à mettre mon programme client en démarrage automatique. Alors que ce dernier se lance bien quand je le démarre à partir de putty ( logiciel pour envoyer les invite commandes vers linux ).

la fonction connect me retourne la valeur -1 et je récuppère l'erreur 101 qui est la valeur de errno et qui me serre de témoin que je stocke dans un fichier texte.

La methode utilisée pour mettre le programme en démarrage automatique est maitrisée et utilisée plusieurs fois sans problème. Par ex : je peux mettre le serveur en demarrage automatique et me connecter avec une autre carte client.
Je travaille sur la carte BeagleBoard BLack.

Est ce que quelqu'un pourrait m'éclairer sur ce sujet ? "J'espère que j'ai bien expliquer le problème.

Merci d'avance !

Je poste le code du client :
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <string>
#include "stdafx.h"


int main(int argv, char** argc){

 
 
 printf("*******TETE DU PROG\n");
 std::string s;

 int host_port= 8888;
 std::string host_name = "xxx.xxx.xxx.xxx" ;
 printf("*******strcpy\n");

 struct sockaddr_in my_addr;

 char buffer[1024];
 int bytecount, con;
 int buffer_len=0;

 int hsock;
 int * p_int;
 int err;
 printf("*******socket\n");
 hsock = socket(AF_INET, SOCK_STREAM, 0);
 if(hsock == -1){
  printf("Error initializing socket %d\n",errno);
  goto FINISH;
 }
 
 p_int = (int*)malloc(sizeof(int));
 *p_int = 1;
  
 if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
  (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
  printf("Error setting options %d\n",errno);
  free(p_int);
  goto FINISH;
 }
 free(p_int);

 my_addr.sin_family = AF_INET ;
 my_addr.sin_port = htons(host_port);
 
 memset(&(my_addr.sin_zero), 0, 8);
 my_addr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx" );
 printf("*******ATTENTE\n");
 con = connect(hsock, (struct sockaddr*)&my_addr, sizeof(my_addr));

 if (con == -1)
 {
 
  std::ofstream ofs;
  ofs.open("./Connection failed.txt", std::ofstream::out | std::ofstream::app);
  ofs << "******Connection failed" << stderr << "Error connecting socket %d\n" << errno << "con " << con << "\r\n";

  ofs.close();  

  if((err = errno) != EINPROGRESS)
  {
   fprintf(stderr, "Error connecting socket %d\n", errno);
   goto FINISH;
  }

 }
 
 else 
 {
  std::ofstream ofs;
  ofs.open("./Connection réussi.txt", std::ofstream::out | std::ofstream::app);
  ofs << "******Connection réussi" << "\r\n";

  ofs.close();
  printf("Connection réussi\n");
 }

 //Now lets do the client related stuff

 buffer_len = 1024;

 memset(buffer, '\0', buffer_len);

 printf("Enter some text to send to the server (press enter)\n");
 fgets(buffer, 1024, stdin);
 buffer[strlen(buffer)-1]='\0';
 
 if( (bytecount=send(hsock, buffer, strlen(buffer),0))== -1){
  fprintf(stderr, "Error sending data %d\n", errno);
  goto FINISH;
 }
 printf("Sent bytes %d\n", bytecount);

 if((bytecount = recv(hsock, buffer, buffer_len, 0))== -1){
  fprintf(stderr, "Error receiving data %d\n", errno);
  goto FINISH;
 }
 printf("Recieved bytes %d\nReceived string "%s"\n", bytecount, buffer);

 close(hsock);
 
FINISH:
;

std::ofstream ofs;
ofs.open("./Client_test.txt", std::ofstream::out | std::ofstream::app);
ofs << "******Fin du prog" << "\r\n";

ofs.close();

return 0;

}




Message édité pour ajout des balises de code;

3 réponses

Messages postés
30487
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 décembre 2020
338
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
99
Salut,

Afin d'éviter tous problèmes potentiels, je viens d'éditer le code pour enlever l'adresse IP qui était dedans.
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
99
Salut,

Je ne sais pas ce que tu utilises pour le démarrage automatique mais à la vue du code 101 (Network is unreachable) es-tu certains que ton soft démarre bien après le service réseau et non avant ?