summaryrefslogtreecommitdiff
path: root/i/simulotron
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron')
-rw-r--r--i/simulotron/src/gs/test_gs.cc4
-rw-r--r--i/simulotron/src/socket/socket_client.cc11
-rw-r--r--i/simulotron/src/socket/socket_client.hh4
-rw-r--r--i/simulotron/src/socket/socket_server.cc40
-rw-r--r--i/simulotron/src/socket/socket_server.hh7
-rw-r--r--i/simulotron/src/socket/test_socket.cc10
6 files changed, 49 insertions, 27 deletions
diff --git a/i/simulotron/src/gs/test_gs.cc b/i/simulotron/src/gs/test_gs.cc
index 5920a9c..108c000 100644
--- a/i/simulotron/src/gs/test_gs.cc
+++ b/i/simulotron/src/gs/test_gs.cc
@@ -201,10 +201,12 @@ int testGSServer(SocketServer & sockServ)
void testGSClient(int pauseMode)
{
+ while(pauseMode)
+ sleep (10);
try
{
// Création de la socket client
- SocketClient sockClient(adr);
+ SocketClient sockClient;
// Demande de connection
sockClient.connect(Address(std::string("localhost"), 4242));
// Création du transmitter
diff --git a/i/simulotron/src/socket/socket_client.cc b/i/simulotron/src/socket/socket_client.cc
index b8bdbc3..6e18c2e 100644
--- a/i/simulotron/src/socket/socket_client.cc
+++ b/i/simulotron/src/socket/socket_client.cc
@@ -30,15 +30,12 @@
#include <sys/socket.h>
#include <cerrno>
-SocketClient::SocketClient (const Address & address)
+SocketClient::SocketClient (void)
{
// Crée le file descriptor du socket
socket_ = socket (PF_INET, SOCK_STREAM, 0);
if (socket_ < 0)
throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
- // On bind le socket
- if (::bind (socket_, address.getSockaddr (), sizeof (*address.getSockaddr ())) < 0)
- throw errno_exception ("Impossible d'assigner la chausette", errno);
}
SocketClient::SocketClient (SocketServer & socketServer)
@@ -61,6 +58,12 @@ SocketClient::connect (const Address & address)
throw errno_exception ("Impossible de mettre la chaussette", errno);
}
+void
+SocketClient::connect (const std::string & address, int port)
+{
+ connect (Address(address, port));
+}
+
std::string
SocketClient::read (void)
{
diff --git a/i/simulotron/src/socket/socket_client.hh b/i/simulotron/src/socket/socket_client.hh
index de58bc5..68bdd15 100644
--- a/i/simulotron/src/socket/socket_client.hh
+++ b/i/simulotron/src/socket/socket_client.hh
@@ -39,13 +39,15 @@ class SocketClient
static const int BUFFER_SIZE = 256;
public:
/// Constructeur
- SocketClient (const Address & address);
+ SocketClient (void);
/// Constructeur accept
SocketClient (SocketServer & socketServer);
/// Destructeur
~SocketClient (void);
/// Connect le client au serveur
void connect (const Address & address);
+ /// Connect le client au serveur en se chargeant de créer Address
+ void connect (const std::string & address, int port);
/// lit du socket
std::string read (void);
/// écrit dans le socket
diff --git a/i/simulotron/src/socket/socket_server.cc b/i/simulotron/src/socket/socket_server.cc
index 662abe0..b5a511e 100644
--- a/i/simulotron/src/socket/socket_server.cc
+++ b/i/simulotron/src/socket/socket_server.cc
@@ -32,18 +32,15 @@
SocketServer::SocketServer (const Address & address)
{
- static const int reuse_s = 1;
- // Crée le file descriptor du socket
- socket_ = socket (PF_INET, SOCK_STREAM, 0);
- if (socket_ < 0)
- throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
- // On règle la réusabilité du socket
- if (setsockopt (socket_, SOL_SOCKET, SO_REUSEADDR,
- &reuse_s, sizeof (int)) == -1)
- throw errno_exception ("Erreur setsockopt : reusable", errno);
- // On bind le socket
- if (::bind (socket_, address.getSockaddr (), sizeof (*address.getSockaddr ())) < 0)
- throw errno_exception ("Impossible d'assigner la chausette", errno);
+ initSocket(address);
+}
+
+SocketServer::SocketServer (const std::string & address, int port)
+{
+ if(address.empty())
+ initSocket(Address(port));
+ else
+ initSocket(Address(address, port));
}
SocketServer::~SocketServer (void)
@@ -70,7 +67,24 @@ SocketServer::accept (void)
}
int
-SocketServer::getFD (void)
+SocketServer::getFD (void) const
{
return socket_;
}
+
+void
+SocketServer::initSocket(const Address & address)
+{
+ static const int reuse_s = 1;
+ // Crée le file descriptor du socket
+ socket_ = socket (PF_INET, SOCK_STREAM, 0);
+ if (socket_ < 0)
+ throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
+ // On règle la réusabilité du socket
+ if (setsockopt (socket_, SOL_SOCKET, SO_REUSEADDR,
+ &reuse_s, sizeof (int)) == -1)
+ throw errno_exception ("Erreur setsockopt : reusable", errno);
+ // On bind le socket
+ if (::bind (socket_, address.getSockaddr (), sizeof (*address.getSockaddr ())) < 0)
+ throw errno_exception ("Impossible d'assigner la chausette", errno);
+}
diff --git a/i/simulotron/src/socket/socket_server.hh b/i/simulotron/src/socket/socket_server.hh
index 30868e8..67800f1 100644
--- a/i/simulotron/src/socket/socket_server.hh
+++ b/i/simulotron/src/socket/socket_server.hh
@@ -35,6 +35,8 @@ class SocketServer
public:
/// Constructeur
SocketServer (const Address & address);
+ /// Constructeur s'occupant de Address
+ SocketServer (const std::string & address, int port);
/// Destructeur
~SocketServer (void);
/// Ecoute le port
@@ -42,7 +44,10 @@ class SocketServer
/// accepte une connection et renvoie le fd
int accept (void);
/// récupère le FD du socket
- int getFD (void);
+ int getFD (void) const;
+ private:
+ /// Initialise le socket
+ void initSocket(const Address & address);
};
#endif //socket_server_hh
diff --git a/i/simulotron/src/socket/test_socket.cc b/i/simulotron/src/socket/test_socket.cc
index 47a8282..0724e8e 100644
--- a/i/simulotron/src/socket/test_socket.cc
+++ b/i/simulotron/src/socket/test_socket.cc
@@ -22,7 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* }}} */
-#include "socket/address.hh"
#include "socket/socket_server.hh"
#include "socket/socket_client.hh"
#include "utils/errno_exception.hh"
@@ -30,9 +29,6 @@
#include <iostream>
#include <sys/wait.h>
-// Adress useful
-Address adr;
-Address adr2;
//Chaine et char de test
const std::string strDepart = "J'aime la prog système.";
std::string strDest;
@@ -50,7 +46,7 @@ int main(void)
int pauseMode;
// Création de la socket serveur;
- SocketServer sockServ(Address(4242));
+ SocketServer sockServ(std::string(),4242);
// Mise en écoute du socket serveur
sockServ.listen(12);
@@ -123,9 +119,9 @@ int testSockClient(int pauseMode)
try
{
// Création de la socket client
- SocketClient sockClient(adr);
+ SocketClient sockClient;
// Demande de connection
- sockClient.connect(Address(std::string("localhost"), 4242));
+ sockClient.connect(std::string("127.0.0.1"), 4242);
// Ecriture du client dans le serveur
sockClient.write(strDepart);
// Reception du message serveur