From d727e1e4440fef16c425990040ef508df985dc89 Mon Sep 17 00:00:00 2001 From: haller Date: Mon, 5 Dec 2005 21:39:42 +0000 Subject: Suppression d'une ligne inutile dans SocketClient::write Remaniement du testGS --- i/simulotron/src/gs/test_gs.cc | 280 ++++++++++++++----------------- i/simulotron/src/socket/socket_client.cc | 1 - 2 files changed, 130 insertions(+), 151 deletions(-) (limited to 'i/simulotron') diff --git a/i/simulotron/src/gs/test_gs.cc b/i/simulotron/src/gs/test_gs.cc index 7054354..0dc557a 100644 --- a/i/simulotron/src/gs/test_gs.cc +++ b/i/simulotron/src/gs/test_gs.cc @@ -51,168 +51,148 @@ long l1 = 465676; long l2; //threads -pthread_t threadId[2]; +pthread_t threadId; void * retour; -int stateTh[2]; +int stateTh; void * testGSServ(void * CaSertARien); void * testGSClient(void * CaSertARien); int main(void) { + // Création de la socket serveur; + SocketServer sockServ(Address(4242)); + // Mise en écoute du socket serveur + sockServ.listen(12); + // On crée le thread du client int ret; - ret = pthread_create(& threadId[0], NULL, testGSServ, NULL); + ret = pthread_create(& threadId, NULL, testGSClient, NULL); if(ret != 0) { - std::cout << "CHIER: Echec thread serveur" << std::endl; + std::cout << "CHIER: Echec thread client" << std::endl; return EXIT_FAILURE; } - ret = pthread_create(& threadId[1], NULL, testGSClient, NULL); - if(ret != 0) + // Acceptation d'une connection + SocketClient sockFork(sockServ); + // Création du transmitter + GSTransmitter gst(sockFork); + // Reception des messages + // une string + GSMessage gsm; + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + if (strDepart != gsm.getGS()) { - std::cout << "CHIER: Echec thread client" << std::endl; - return EXIT_FAILURE; + std::cout << "CHIER String altéré\n" + << "Message d'origine: " << strDepart << "\n" + << "Message d'arrivé: " << gsm.getGS() + << std::endl; + return 1; } - pthread_join(threadId[0], &retour); - stateTh[0] = (int) retour; - pthread_join(threadId[1], &retour); - stateTh[1] = (int) retour; - if(stateTh[0] == 0 && stateTh[1] == 0) - return 0; - else + std::cout << "String OK" << std::endl; + // Un char + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&b, sizeof(char)); + if ( a != b) + { + std::cout << "CHIER Char altéré\n" + << "Message d'origine: " << a << "\n" + << "Message d'arrivé: " << b + << std::endl; return 1; -} - -void * testGSServ(void * CaSertARien) -{ - try + } + std::cout << "Char OK" << std::endl; + // Un short + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&s2, sizeof(char)); + if ( s1 != s2) { - // Création de la socket serveur; - SocketServer sockServ(Address(4242)); - // Mise en écoute du socket serveur - sockServ.listen(12); - // Acceptation d'une connection - SocketClient sockFork(sockServ); - // Création du transmitter - GSTransmitter gst(sockFork); - // Reception des messages - // une string - GSMessage gsm; - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - if (strDepart != gsm.getGS()) - { - std::cout << "CHIER String altéré\n" - << "Message d'origine: " << strDepart << "\n" - << "Message d'arrivé: " << gsm.getGS() - << std::endl; - return (void *)1; - } - std::cout << "String OK" << std::endl; - // Un char - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&b, sizeof(char)); - if ( a != b) - { - std::cout << "CHIER Char altéré\n" - << "Message d'origine: " << a << "\n" - << "Message d'arrivé: " << b - << std::endl; - return (void *)1; - } - std::cout << "Char OK" << std::endl; - // Un short - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&s2, sizeof(char)); - if ( s1 != s2) - { - std::cout << "CHIER Short altéré\n" - << "Message d'origine: " << s1 << "\n" - << "Message d'arrivé: " << s2 - << std::endl; - return (void *)1; - } - std::cout << "Short OK" << std::endl; - // Un int positif - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&i2, sizeof(char)); - if ( i1 != i2) - { - std::cout << "CHIER int positif altéré\n" - << "Message d'origine: " << i1 << "\n" - << "Message d'arrivé: " << i2 - << std::endl; - return (void *)1; - } - std::cout << "int positif OK" << std::endl; - // Un int negatif - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&i4, sizeof(char)); - if ( i3 != i4) - { - std::cout << "CHIER int negatif altéré\n" - << "Message d'origine: " << i3 << "\n" - << "Message d'arrivé: " << i4 - << std::endl; - return (void *)1; - } - std::cout << "int negatif OK" << std::endl; - // Un Long - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&l2, sizeof(char)); - if ( l1 != l2) - { - std::cout << "CHIER long altéré\n" - << "Message d'origine: " << l1 << "\n" - << "Message d'arrivé: " << l2 - << std::endl; - return (void *)1; - } - std::cout << "int positif OK" << std::endl; - // Un gros message - if (gst.getGS(gsm) != 0) - throw std::runtime_error ("CHIER!! Reception mal passé"); - gsm.readGS(&s2,sizeof(short)); - gsm.readGS(&l2,sizeof(long)); - gsm.readGS(&i4,sizeof(int)); - if ( s1 != s2) - { - std::cout << "CHIER Short altéré\n" - << "Message d'origine: " << s1 << "\n" - << "Message d'arrivé: " << s2 - << std::endl; - return (void *)1; - } - if ( l1 != l2) - { - std::cout << "CHIER int positif altéré\n" - << "Message d'origine: " << l1 << "\n" - << "Message d'arrivé: " << l2 - << std::endl; - return (void *)1; - } - if ( i3 != i4) - { - std::cout << "CHIER int negatif altéré\n" - << "Message d'origine: " << i3 << "\n" - << "Message d'arrivé: " << i4 - << std::endl; - return (void *)1; - } - std::cout << "Gros message OK" << std::endl; + std::cout << "CHIER Short altéré\n" + << "Message d'origine: " << s1 << "\n" + << "Message d'arrivé: " << s2 + << std::endl; + return 1; } - catch(std::exception & chier) + std::cout << "Short OK" << std::endl; + // Un int positif + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&i2, sizeof(char)); + if ( i1 != i2) { - std::cout << "CHIER !! Une exception a été lancé coté serveur!!" << std::endl; - std::cout << chier.what() << std::endl; - return (void *) 1; + std::cout << "CHIER int positif altéré\n" + << "Message d'origine: " << i1 << "\n" + << "Message d'arrivé: " << i2 + << std::endl; + return 1; } - return (void *) 0; + std::cout << "int positif OK" << std::endl; + // Un int negatif + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&i4, sizeof(char)); + if ( i3 != i4) + { + std::cout << "CHIER int negatif altéré\n" + << "Message d'origine: " << i3 << "\n" + << "Message d'arrivé: " << i4 + << std::endl; + return 1; + } + std::cout << "int negatif OK" << std::endl; + // Un Long + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&l2, sizeof(char)); + if ( l1 != l2) + { + std::cout << "CHIER long altéré\n" + << "Message d'origine: " << l1 << "\n" + << "Message d'arrivé: " << l2 + << std::endl; + return 1; + } + std::cout << "int positif OK" << std::endl; + // Un gros message + if (gst.getGS(gsm) != 0) + throw std::runtime_error ("CHIER!! Reception mal passé"); + gsm.readGS(&s2,sizeof(short)); + gsm.readGS(&l2,sizeof(long)); + gsm.readGS(&i4,sizeof(int)); + if ( s1 != s2) + { + std::cout << "CHIER Short altéré\n" + << "Message d'origine: " << s1 << "\n" + << "Message d'arrivé: " << s2 + << std::endl; + return 1; + } + if ( l1 != l2) + { + std::cout << "CHIER int positif altéré\n" + << "Message d'origine: " << l1 << "\n" + << "Message d'arrivé: " << l2 + << std::endl; + return 1; + } + if ( i3 != i4) + { + std::cout << "CHIER int negatif altéré\n" + << "Message d'origine: " << i3 << "\n" + << "Message d'arrivé: " << i4 + << std::endl; + return 1; + } + std::cout << "Gros message OK" << std::endl; + //On attend le thread client + pthread_join(threadId, &retour); + stateTh = (int) retour; + if(stateTh == 0) + return 0; + else + return 1; } void * testGSClient(void * CaSertARien) @@ -226,7 +206,7 @@ void * testGSClient(void * CaSertARien) // Création du transmitter GSTransmitter gst(sockClient); GSMessage g1,g2,g3,g4,g5,g6,g7; - g1.writeGS(strDepart.c_str(), strDepart.size()); + g1.writeGS(strDepart.data(), strDepart.size()); gst.putGS(g1); g2.writeGS(&s1, sizeof(short)); gst.putGS(g2); @@ -242,13 +222,13 @@ void * testGSClient(void * CaSertARien) g6.writeGS(&i3, sizeof(int)); gst.putGS(g6); std::cout << "Et pouf" << std::endl; - + /*//tv - timeval tv; - tv.tv_sec = 20; - tv.tv_usec = 0; - select(1,NULL,NULL,NULL,&tv); - */ + timeval tv; + tv.tv_sec = 20; + tv.tv_usec = 0; + select(1,NULL,NULL,NULL,&tv); + */ } catch(std::exception & chier) diff --git a/i/simulotron/src/socket/socket_client.cc b/i/simulotron/src/socket/socket_client.cc index 9099089..ef26e70 100644 --- a/i/simulotron/src/socket/socket_client.cc +++ b/i/simulotron/src/socket/socket_client.cc @@ -91,7 +91,6 @@ SocketClient::write (const std::string & str) int size = str.size () - pos < BUFFER_SIZE - 1 ? str.size () - pos:BUFFER_SIZE - 1; str.copy (buffer, size, pos); pos += size; - buffer[size] = 0; retval = ::write (socket_, buffer, size); if (retval < 0) throw errno_exception ("SocketClient: erreur d'écriture (write()) ", errno); -- cgit v1.2.3