Application ethernet multi clients sous LINUX

Zak12 Messages postés 1 Date d'inscription mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014 - Modifié par Twinuts le 12/09/2014 à 10:36
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 12 sept. 2014 à 10:40
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

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
9 sept. 2014 à 18:06
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 sept. 2014 à 10:37
Salut,

Afin d'éviter tous problèmes potentiels, je viens d'éditer le code pour enlever l'adresse IP qui était dedans.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 sept. 2014 à 10:40
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 ?
0
Rejoignez-nous