je debute abec les socket et je malgré plein d'exemple je n'arrive pas à
faire ce que je souhaite (a chaque foit les exemple ce limite à "parler" au
serveur)
ce que je cherche à faire :
le client doit transmettre une ligne (string du type : "XXXXX-123456-NDM")
et attendre LES reponses....
le serveur attend une ligne (string du type "XXXXX-123456-NDM")
si c'est ok il effectue des actions et pour chaque action realisé il devra
"repondre" au client avec un string du type "1:ok","2:ok" etc...
quand il aura fini, il transmettra le string "exit" afin que le client sache
que c'est fini et ce deconnecte...
je n'arrive pas à faire ceci, si quelqu'un pouvait m'aider ce serait super
sympa
d'avance merci
A+
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Scetbon Cyril
Un petit exemple qui fonctionne:
use IO::Socket; my $tt = 0; my $serveur=IO::Socket::INET->new( LocalPort => 5050, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n"; while (my ($client,$client_add) = $serveur->accept()) { close($serveur); print $client "Connection reussi !n"; while(my $ligne = <$client>) { print "RECU: $ligne"; print $client "RECU: $ligne"; if($ligne=~/^QUIT/i) { #close($client); undef $client; $tt++ } if($ligne=~/^EVEIL/i) { $tt++ } } if($tt <= 0) { print $client "Erreur!n" } exit } continu { close($serveur) }
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-(
Mais cela dépend de ce que tu as besoin.
En espérant que cela t'aide. alain wrote:
bonjour,
je debute abec les socket et je malgré plein d'exemple je n'arrive pas à faire ce que je souhaite (a chaque foit les exemple ce limite à "parler" au serveur)
ce que je cherche à faire :
le client doit transmettre une ligne (string du type : "XXXXX-123456-NDM") et attendre LES reponses....
le serveur attend une ligne (string du type "XXXXX-123456-NDM") si c'est ok il effectue des actions et pour chaque action realisé il devra "repondre" au client avec un string du type "1:ok","2:ok" etc... quand il aura fini, il transmettra le string "exit" afin que le client sache que c'est fini et ce deconnecte...
je n'arrive pas à faire ceci, si quelqu'un pouvait m'aider ce serait super sympa d'avance merci A+
Un petit exemple qui fonctionne:
use IO::Socket;
my $tt = 0;
my $serveur=IO::Socket::INET->new(
LocalPort => 5050,
Type => SOCK_STREAM,
Listen => 1,
ReuseAddr => 1)
or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept())
{
close($serveur);
print $client "Connection reussi !n";
while(my $ligne = <$client>)
{
print "RECU: $ligne";
print $client "RECU: $ligne";
if($ligne=~/^QUIT/i)
{
#close($client);
undef $client;
$tt++
}
if($ligne=~/^EVEIL/i)
{
$tt++
}
}
if($tt <= 0)
{ print $client "Erreur!n" }
exit
}
continu
{ close($serveur) }
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Mais cela dépend de ce que tu as besoin.
En espérant que cela t'aide.
alain wrote:
bonjour,
je debute abec les socket et je malgré plein d'exemple je n'arrive pas à
faire ce que je souhaite (a chaque foit les exemple ce limite à "parler" au
serveur)
ce que je cherche à faire :
le client doit transmettre une ligne (string du type : "XXXXX-123456-NDM")
et attendre LES reponses....
le serveur attend une ligne (string du type "XXXXX-123456-NDM")
si c'est ok il effectue des actions et pour chaque action realisé il devra
"repondre" au client avec un string du type "1:ok","2:ok" etc...
quand il aura fini, il transmettra le string "exit" afin que le client sache
que c'est fini et ce deconnecte...
je n'arrive pas à faire ceci, si quelqu'un pouvait m'aider ce serait super
sympa
d'avance merci
A+
use IO::Socket; my $tt = 0; my $serveur=IO::Socket::INET->new( LocalPort => 5050, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n"; while (my ($client,$client_add) = $serveur->accept()) { close($serveur); print $client "Connection reussi !n"; while(my $ligne = <$client>) { print "RECU: $ligne"; print $client "RECU: $ligne"; if($ligne=~/^QUIT/i) { #close($client); undef $client; $tt++ } if($ligne=~/^EVEIL/i) { $tt++ } } if($tt <= 0) { print $client "Erreur!n" } exit } continu { close($serveur) }
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-(
Mais cela dépend de ce que tu as besoin.
En espérant que cela t'aide. alain wrote:
bonjour,
je debute abec les socket et je malgré plein d'exemple je n'arrive pas à faire ce que je souhaite (a chaque foit les exemple ce limite à "parler" au serveur)
ce que je cherche à faire :
le client doit transmettre une ligne (string du type : "XXXXX-123456-NDM") et attendre LES reponses....
le serveur attend une ligne (string du type "XXXXX-123456-NDM") si c'est ok il effectue des actions et pour chaque action realisé il devra "repondre" au client avec un string du type "1:ok","2:ok" etc... quand il aura fini, il transmettra le string "exit" afin que le client sache que c'est fini et ce deconnecte...
je n'arrive pas à faire ceci, si quelqu'un pouvait m'aider ce serait super sympa d'avance merci A+
Scetbon Cyril
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
alain
meci pour ton exemple, mais comment faire pour que le serveur reste en ecoute lorsque la connexion avec un client est terminé (actuellement il ce ferme) merci A+
"Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
meci pour ton exemple, mais comment faire pour que le serveur reste en
ecoute lorsque la connexion avec un client est terminé (actuellement il ce
ferme)
merci
A+
"Scetbon Cyril" <cyril.scetbon@free.fr> a écrit dans le message news:
bpfoei$4an1@news.rd.francetelecom.fr...
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
meci pour ton exemple, mais comment faire pour que le serveur reste en ecoute lorsque la connexion avec un client est terminé (actuellement il ce ferme) merci A+
"Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
alain
re: j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion, par contre il ne veut pas transmettre mes info à la suite help me please :(
--------------------------------------------- use IO::Socket;
my $serveur=IO::Socket::INET->new( LocalPort => 5001, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept()) {
------------------------------------------ "Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
re:
j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion,
par contre
il ne veut pas transmettre mes info à la suite
help me please :(
---------------------------------------------
use IO::Socket;
my $serveur=IO::Socket::INET->new(
LocalPort => 5001,
Type => SOCK_STREAM,
Listen => 1,
ReuseAddr => 1)
or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept())
{
------------------------------------------
"Scetbon Cyril" <cyril.scetbon@free.fr> a écrit dans le message news:
bpfoei$4an1@news.rd.francetelecom.fr...
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
re: j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion, par contre il ne veut pas transmettre mes info à la suite help me please :(
--------------------------------------------- use IO::Socket;
my $serveur=IO::Socket::INET->new( LocalPort => 5001, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept()) {
------------------------------------------ "Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-( Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
Scetbon Cyril
On retouche un peu tout ça pour avoir une version un peu plus élaborée:
use IO::Socket; my $serveur=IO::Socket::INET->new( LocalPort => 5050, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n"; while (my ($client,$client_add) = $serveur->accept()) { print "Nouvelle Connexion clienten"; print $client "Connection reussi !n"; while(my $ligne = <$client>) { print "RECU: $ligne"; print $client "RECU: $ligne"; undef $client if($ligne=~/^QUIT/i); if($ligne=~/HALT/i) { print "Demande d'arret du serveurn"; print "Fermeture clientn"; undef $client; print "Fermeture serveurn"; undef $serveur; exit } } print "Fin de connexion clienten" }
Voilà, lorsqu'un client interrompt sa connexion (en envoyant quit) le serveur attend une nouvelle connexion. Lorsqu'un client envoie halt le serveur ferme la connexion cliente puis s'interrompt.
alain wrote:
meci pour ton exemple, mais comment faire pour que le serveur reste en ecoute lorsque la connexion avec un client est terminé (actuellement il ce ferme) merci A+
"Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
On retouche un peu tout ça pour avoir une version un peu plus élaborée:
use IO::Socket;
my $serveur=IO::Socket::INET->new(
LocalPort => 5050,
Type => SOCK_STREAM,
Listen => 1,
ReuseAddr => 1)
or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept())
{
print "Nouvelle Connexion clienten";
print $client "Connection reussi !n";
while(my $ligne = <$client>)
{
print "RECU: $ligne";
print $client "RECU: $ligne";
undef $client if($ligne=~/^QUIT/i);
if($ligne=~/HALT/i)
{
print "Demande d'arret du serveurn";
print "Fermeture clientn";
undef $client;
print "Fermeture serveurn";
undef $serveur;
exit
}
}
print "Fin de connexion clienten"
}
Voilà, lorsqu'un client interrompt sa connexion (en envoyant quit) le
serveur attend une nouvelle connexion. Lorsqu'un client envoie halt le
serveur ferme la connexion cliente puis s'interrompt.
alain wrote:
meci pour ton exemple, mais comment faire pour que le serveur reste en
ecoute lorsque la connexion avec un client est terminé (actuellement il ce
ferme)
merci
A+
"Scetbon Cyril" <cyril.scetbon@free.fr> a écrit dans le message news:
bpfoei$4an1@news.rd.francetelecom.fr...
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
On retouche un peu tout ça pour avoir une version un peu plus élaborée:
use IO::Socket; my $serveur=IO::Socket::INET->new( LocalPort => 5050, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n"; while (my ($client,$client_add) = $serveur->accept()) { print "Nouvelle Connexion clienten"; print $client "Connection reussi !n"; while(my $ligne = <$client>) { print "RECU: $ligne"; print $client "RECU: $ligne"; undef $client if($ligne=~/^QUIT/i); if($ligne=~/HALT/i) { print "Demande d'arret du serveurn"; print "Fermeture clientn"; undef $client; print "Fermeture serveurn"; undef $serveur; exit } } print "Fin de connexion clienten" }
Voilà, lorsqu'un client interrompt sa connexion (en envoyant quit) le serveur attend une nouvelle connexion. Lorsqu'un client envoie halt le serveur ferme la connexion cliente puis s'interrompt.
alain wrote:
meci pour ton exemple, mais comment faire pour que le serveur reste en ecoute lorsque la connexion avec un client est terminé (actuellement il ce ferme) merci A+
"Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
Scetbon Cyril
voir + haut. Surement un souci de flush. Il faut forcer la non bufferisation et l'envoi des caractères.
ajoute ça avant de commencer l'envoi de tes chaines. select((select($client),$|++)[0]);
alain wrote:
re: j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion, par contre il ne veut pas transmettre mes info à la suite help me please :(
--------------------------------------------- use IO::Socket;
my $serveur=IO::Socket::INET->new( LocalPort => 5001, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept()) {
------------------------------------------ "Scetbon Cyril" a écrit dans le message news: bpfoei$
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non multithreadé. Donc les clients qui se connectent devront attendre leur tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
voir + haut.
Surement un souci de flush. Il faut forcer la non bufferisation et
l'envoi des caractères.
ajoute ça avant de commencer l'envoi de tes chaines.
select((select($client),$|++)[0]);
alain wrote:
re:
j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion,
par contre
il ne veut pas transmettre mes info à la suite
help me please :(
---------------------------------------------
use IO::Socket;
my $serveur=IO::Socket::INET->new(
LocalPort => 5001,
Type => SOCK_STREAM,
Listen => 1,
ReuseAddr => 1)
or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept())
{
------------------------------------------
"Scetbon Cyril" <cyril.scetbon@free.fr> a écrit dans le message news:
bpfoei$4an1@news.rd.francetelecom.fr...
Scetbon Cyril wrote:
Tu pourras t'inspirer de cet exemple. Par contre, c'est un serveur non
multithreadé. Donc les clients qui se connectent devront attendre leur
tour :-(
Euh, pire ici y aura qu'un client, enfin c qu'un exemple.
voir + haut. Surement un souci de flush. Il faut forcer la non bufferisation et l'envoi des caractères.
ajoute ça avant de commencer l'envoi de tes chaines. select((select($client),$|++)[0]);
alain wrote:
re: j'ai trouvé pour que le serveur reste en listen à la fin d'une connexion, par contre il ne veut pas transmettre mes info à la suite help me please :(
--------------------------------------------- use IO::Socket;
my $serveur=IO::Socket::INET->new( LocalPort => 5001, Type => SOCK_STREAM, Listen => 1, ReuseAddr => 1) or die "Impossible de lancer le serveur : $@n";
while (my ($client,$client_add) = $serveur->accept()) {