kenshiro22 | Bonjour, je suis un développeur amateur... j'aurais eu besoin d'aide pour rendre mon code compatible avec le multithread, j'ai essayer de trouver de la doc..... mais je n'y comprends rien, s'il vous plait, quelqu'un pourrait me donner les modification a faire pour parvenir a mes fin??? j'ai mit mon code juste en dessou
Je vous en remerci grandement, et d'avance
Code :
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <fcntl.h>
- #include <netdb.h>
- #include <iostream>
- #include <string.h>
- #include <unistd.h>
- using namespace std;
- #define TAILLEMAX 256
- #define PORT 2708
- #define SOCKET_ERROR -1
- #define INVALID_SOCKET -1
- #define CONNEXION_MAX 3
- class connexion
- {
- private:
- struct sockaddr_in serv_ad, client_ad,sin;
- int sockd,sockcli,ex;
- public:
- connexion()
- {
- sockd=socket(AF_INET,SOCK_STREAM,0);
- }
- int getException()
- {
- return ex;
- }
- void init(int domaine,int type )
- {
- serv_ad.sin_family = domaine;
- serv_ad.sin_addr.s_addr = type;
- serv_ad.sin_port = htons(PORT);
- }
- int c_bind()
- {
- int res = bind(sockd,(struct sockaddr*)&serv_ad,sizeof(serv_ad));
- return res;
- }
- int c_listen()
- {
- return listen(sockd,100);
- }
- unsigned int sizeOfSin()
- {
- return sizeof(sin);
- }
- int c_accept(unsigned int size)
- {
- return (sockcli = accept(sockd,(struct sockaddr*)&sin, &size));
- }
- int c_read(char machaine[TAILLEMAX])
- {
- char ch[TAILLEMAX];
- int res = (read(sockcli,ch,sizeof(ch)));
- strcpy(machaine,ch);
- return res;
- }
- int c_write(char machaine[TAILLEMAX])
- {
- char envoi[TAILLEMAX];
- strcpy(envoi,machaine);
- int res = write(sockcli,envoi,sizeof(envoi));
- ;
- return res;
- }
- void c_close()
- {
- close(sockcli);
- }
- int c_connect()
- {
- sockcli=sockd;
- return (connect(sockd,(struct sockaddr*)&serv_ad,sizeof(serv_ad)));
- }
- };
- int main(int argc, char *argv[]){
- connexion serveur;
- unsigned int sin_size;
- int ecoute,conn_serv;
- char ch[TAILLEMAX],taille,ret,recu[TAILLEMAX];
- char * quit ="/quit\0";
- //ouverture de la socket socket.open
- ;
- if(serveur.getException() ==-1)
- {
- printf("Erreur
- socket\n" );
- return -1;
- }
- serveur.init(AF_INET,htonl(INADDR_ANY));
- if (serveur.c_bind() == SOCKET_ERROR)
- { // liaison à la socket
- printf("Erreur bind \n" );
- return -1;
- }
- conn_serv = 0;
- do
- {
- cout << "Serveur en ecoute...\n";
- }while((ecoute = serveur.c_listen()) != 0);
- cout << "Tentative de connexion " <<conn_serv+1 << "\n";
- if(ecoute == SOCKET_ERROR)
- {
- cout << "Connexion failed\n";
- return EXIT_FAILURE;
- }
-
- //Accepte la connexion
- // structure destinée à recueillir les renseignements sur l'appelant
- sin_size = serveur.sizeOfSin();
- if(serveur.c_accept(sin_size) == INVALID_SOCKET)
- {
- cout<<"Tentative de connexion Superieur à" <<conn_serv+1<<"\n";
- return EXIT_FAILURE;
- };
- cout << "Acceptation de connexion\n";
- // connexion et envoi du message au client
- int retour;
- cout<<"Connexion etabli\n";
- int bcle = 1;
- do
- {
- fflush(stdin);
- fflush(stdout);
- ret = (serveur.c_read(ch)==-1);
- if(ret ==-1)
- {
- cout <<"Receive error\n";
- return EXIT_FAILURE;
- }
- if(ch[0] == quit[0] && ch[1] == quit[1] && ch[2] == quit[2] && ch[3] == quit[3] && ch[4] == quit[4])
- {
- bcle = 0;
- cout << "Deconnexion du client\n";
- }
- else
- {
- cout<<"Client: "<<ch<<"\n";
- cout<<"Entrez le mot a envoyer : ";
- fgets(recu,TAILLEMAX,stdin);
- fflush(stdin);
- fflush(stdout);
- ret = serveur.c_write(recu);
- if(recu[0] == quit[0] && recu[1] == quit[1] && recu[2] == quit[2] && recu[3] == quit[3] && recu[4] == quit[4])
- {
- bcle = 0;
- cout<<"Deconnexion\n";
- }
- else
- {
- if (ret == SOCKET_ERROR)
- {
- cout<<"Erreur envoi \n";
- return EXIT_FAILURE;
- }
- ret = -1;
- cout<<"------MESSAGE ENVOYEE------\n";
- }
- }
- }while(bcle);
- serveur.c_close();
- return 0;
- }
|
|