A voir également:
- Socket perl
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- Error 2002 (hy000): can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) - Forum Bases de données
- Socket 1366 ✓ - Forum Matériel & Système
- Socket 478 ✓ - Forum Processeur
8 réponses
Salut,
voici un exemple, à toi d'adapter
server
voici un exemple, à toi d'adapter
server
#!/usr/bin/perl use strict;use warnings; use IO::Socket; my $serveur = IO::Socket::INET->new(LocalPort => 10000, Type => SOCK_STREAM, Reuse => 1, Listen => 10) or die "Impossible serveur tcp sur le port 10000 : $@\n"; while (my $client = $serveur->accept()) { next if my $pid = fork; close($serveur); print "*** Debut de connexion ***\n"; print $client "Bienvenu sur le SERVER !\n--- Je suis PID $$ ---\n"; while( my $rep = <$client>) { print $rep; if ( $rep =~ /^QUIT/i) { close($client); } print "*** Fin de connexion sur PID $$ ***\n"; exit; }continu { close($client); } } $SIG{CHLD} = 'IGNORE'; __END__le client
#!/usr/bin/perl use strict;use warnings; use IO::Socket; my $socket = IO::Socket::INET->new(Proto => "tcp", PeerAddr => "10.0.0.5", PeerPort => 10000) or die "Failed : $@\n"; print "*** Debut de connexion ***\n"; while(my $reponse=<$socket>){ print "Le serveur a dit : $reponse"; print $socket "Au revoir SERVEUR!!!\n"; } print "*** Fin de connexion ***\n"; __END__Sur le serveur
lami20j@deb:~$ perl ccm.pl *** Debut de connexion *** Au revoir SERVEUR!!! *** Fin de connexion sur PID 12855 ***Sur le client
lami20j@debian:~$ perl ccm.pl *** Debut de connexion *** Le serveur a dit : Bienvenu sur le SERVER ! Le serveur a dit : --- Je suis PID 12855 --- *** Fin de connexion *** lami20j@debian:~$
bonsoir lami, merci pour ta réponse.
Mais le client que tu proposes ne fait que lire la socket.
J'aimerais avoir un client qui écrit et lit simultanément sur une socket, d'où l'utilisation d'un fork avec un père qui écrit et un fils qui lit.
Rappel du problème : le père bloque sur l'écriture de la socket tant que le fils boucle pour la lire.
J'essaierai tout de même les paramètres de ton exemple que je n'ai jamais utilisé (Type=>SOCK_STREAM pour la création de l'objet et $SIG{CHLD}='IGNORE' ...)
Mais le client que tu proposes ne fait que lire la socket.
J'aimerais avoir un client qui écrit et lit simultanément sur une socket, d'où l'utilisation d'un fork avec un père qui écrit et un fils qui lit.
Rappel du problème : le père bloque sur l'écriture de la socket tant que le fils boucle pour la lire.
J'essaierai tout de même les paramètres de ton exemple que je n'ai jamais utilisé (Type=>SOCK_STREAM pour la création de l'objet et $SIG{CHLD}='IGNORE' ...)
Re,
Mais le client que tu proposes ne fait que lire la socket.
Il écrit aussi Au revoir SERVEUR !!!
J'aimerais avoir un client qui écrit et lit simultanément sur une socket, d'où l'utilisation d'un fork avec un père qui écrit et un fils qui lit.
Rappel du problème : le père bloque sur l'écriture de la socket tant que le fils boucle pour la lire.
Ok, je vais voir ça ;-)
Mais le client que tu proposes ne fait que lire la socket.
Il écrit aussi Au revoir SERVEUR !!!
J'aimerais avoir un client qui écrit et lit simultanément sur une socket, d'où l'utilisation d'un fork avec un père qui écrit et un fils qui lit.
Rappel du problème : le père bloque sur l'écriture de la socket tant que le fils boucle pour la lire.
Ok, je vais voir ça ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Petite remarque hors sujet.
Le mot socket est masculin.
Sinon, on écrit aussi une soquette, mais c'est autre chose.
Sinon, pour compléter un peu le sujet, il t'est possible de faire un thread plutôt que de créer un processus avec un fork pour lire et écrire simultanément sur ton socket.
Le mot socket est masculin.
Sinon, on écrit aussi une soquette, mais c'est autre chose.
Sinon, pour compléter un peu le sujet, il t'est possible de faire un thread plutôt que de créer un processus avec un fork pour lire et écrire simultanément sur ton socket.
Toujours hors sujet
Semble-t-il que certains traducteurs spécialisés pense que socket c'est un féminin, vu qu'il s'agit d'une association d'une adresse IP et d'un numéro de port
Exemple :
Livre TCP/IP 3ème édition, Edition O'Reilly - Traduction Emmanuel Chaput et Stéphane Larroque
Je cite depuis Page 50
L'association d'une adresse IP et d'un numéro de port est appelée une socket
Livre Perl en Action, Edition O'Reilly - Traduction Sébastien Blondeel
Je cite depuis Page 702
La fonction socket crée une socket, la fonction bind donne à une socket un nom local, la fonction connect connecte la socket à une autre socket, qui peut être distante, la fonction listen prépare une socket à recevoir des connexions d'autres socket ......
On peut communiquer via une socket ...
Livre Programmation en Perl, 3ème edition, Editon O'Reilly - Traduction Philippe Bruhat, Kai Carver et Gérald Sédrati
Je cite
Glosaire Page 974
socket - ..... La chose la plus importante concernant une socket est son adresse réseau.....
Page 409
Bien que les sockets aient été inventées sur BSD, elles se sont rapidement répandues....
Page 746
Cette fonction ouvre une socket du type spécifié...
Livre Programmation système en C sous Linux par Christophe Blaess
Je cite
Page 132
Ces données peuvent être transmises sur une socket TCP/IP avec une priorité ....
Page 516
Les programmes offrant des services réseau peuvent choisir d'utiliser leur propre système de connexion, construisant une socket et restant à l'écoute ....
Semble-t-il que certains traducteurs spécialisés pense que socket c'est un féminin, vu qu'il s'agit d'une association d'une adresse IP et d'un numéro de port
Exemple :
Livre TCP/IP 3ème édition, Edition O'Reilly - Traduction Emmanuel Chaput et Stéphane Larroque
Je cite depuis Page 50
L'association d'une adresse IP et d'un numéro de port est appelée une socket
Livre Perl en Action, Edition O'Reilly - Traduction Sébastien Blondeel
Je cite depuis Page 702
La fonction socket crée une socket, la fonction bind donne à une socket un nom local, la fonction connect connecte la socket à une autre socket, qui peut être distante, la fonction listen prépare une socket à recevoir des connexions d'autres socket ......
On peut communiquer via une socket ...
Livre Programmation en Perl, 3ème edition, Editon O'Reilly - Traduction Philippe Bruhat, Kai Carver et Gérald Sédrati
Je cite
Glosaire Page 974
socket - ..... La chose la plus importante concernant une socket est son adresse réseau.....
Page 409
Bien que les sockets aient été inventées sur BSD, elles se sont rapidement répandues....
Page 746
Cette fonction ouvre une socket du type spécifié...
Livre Programmation système en C sous Linux par Christophe Blaess
Je cite
Page 132
Ces données peuvent être transmises sur une socket TCP/IP avec une priorité ....
Page 516
Les programmes offrant des services réseau peuvent choisir d'utiliser leur propre système de connexion, construisant une socket et restant à l'écoute ....
Effectivement, tes sources sont fiables, même si je trouve que ça ne sonne pas très bien.
Dans mon message précédent, je proposais l'utilisation des threads.
Débutant dans ce langage, je viens de découvrir à quel point le modèle de thread est mauvais en PERL.
Les variables ne sont pas partagées par défaut entre les threads. Il faut préciser le mot clé shared pour les rendre partagées. Bon, pourquoi pas.
Toutefois, les types structurés ou objets sont partageables que si les éléments qui le composent sont partageables. Ainsi, il devient impossible de partager un socket. Ainsi, la solution d'avoir un thread qui consomme et l'autre qui écrit n'est plus viable.
Quelqu'un saurait-il comment outrepasser cette limitation du modèle de thread de PERL ?
Dans mon message précédent, je proposais l'utilisation des threads.
Débutant dans ce langage, je viens de découvrir à quel point le modèle de thread est mauvais en PERL.
Les variables ne sont pas partagées par défaut entre les threads. Il faut préciser le mot clé shared pour les rendre partagées. Bon, pourquoi pas.
Toutefois, les types structurés ou objets sont partageables que si les éléments qui le composent sont partageables. Ainsi, il devient impossible de partager un socket. Ainsi, la solution d'avoir un thread qui consomme et l'autre qui écrit n'est plus viable.
Quelqu'un saurait-il comment outrepasser cette limitation du modèle de thread de PERL ?
bien j'avou que j'ai exactement le meme soucis que toi, peu importe les codes testés, je ne peux que lire dans la socket, ou que ecrire dessus, mais pas les deux, et ce soucis ne se pose que sous windows ..
sous linux, aucun soucis, donc j'en deduis comme toi, un soucis de fork() avec windows..
Pour ce qui concerne les threads, je ne vois pas trop comment organiser mon code pour faire le serveur.
Si il y aurait kk1 pour eclairer cette situation .. Merci :)
sous linux, aucun soucis, donc j'en deduis comme toi, un soucis de fork() avec windows..
Pour ce qui concerne les threads, je ne vois pas trop comment organiser mon code pour faire le serveur.
Si il y aurait kk1 pour eclairer cette situation .. Merci :)