|
| Ouvrir un SOCKET et recevoir un text |
| Iniciado por Fred2355, 22,dic. 2018 19:11 - 9 respuestas |
| |
| | | |
|
| |
Miembro registrado 236 mensajes |
|
| Publicado el 22,diciembre 2018 - 19:11 |
Bonsoir à tous, Ce sujet a certainement était déjà traité, mais j'en appel à vous car je ne m'en sort pas en lisant les post sur le forum ou en ouvrant les exemples de mon WD23. Voici ce qui m'amène.
J'ai deux applications distinctes. L'un en WD23 et l'autre faite par un tiers en C#.
dans mon appli en WD il faut que j'ouvre un socket en localhost (et plus précisément sur 127.0.0.1.5010) pour que l'appli en C# m'envoi un message texte du type AZERTY12345 ( en fait, en soit le contenu du message text n'est pas le soucis).
Ce que je cherhce à faire est que si je recoit un message sur mon socket, je puisse (dans un premier temps ) le mettre dans un champ de type LIBELLE.
Qui pourrait me dire comment faire?
En vous remerciant. Et bonnes fetes de fin d'année |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 236 mensajes |
|
| Publicado el 02,enero 2019 - 20:54 |
Bonsoir à tous,
J'apporte un peu de renseignement sur ce sujet.
En fait, j'ai decouvert que lorsque j'utilise SocketLit, cette fonction ne lit pas tout le flux qui passe sur 127.0.0.1:5010
Qui pourrait me dire qu'elle est la bonne ligne de commande pour que lorsque j'ouvre un socket la fonction SocketLit puisse, dans une instruction Trace() , afficher tout ce qui passe dans le socket, que ce soit utile ou non.
Merci pour votre aide. Et bonne année |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 03,enero 2019 - 11:42 |
Bonjour,
Comment ça, "cette fonction ne lit pas tout le flux" ? Pourrais tu nous mettre le code utilisé STP ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 03,enero 2019 - 11:50 |
Pour le principe général, voici un petit exemple :

Un objet, contient la méthode LISTEN Celle ci s'execute dans thread secondaire afin de ne pas bloquer l'application.
La fonction execute une boucle infinie qui "ecoute" avec SocketLit() SocketLit renvoi un Buffer, si celui-ci n'est pas vide c'est qu'on a reçu quelque chose Ici le programme décode le pack reçu et l'envoi dans un Pool de traitement (_AddPacketToPool((clPack))
Le pack est ensuite traité par un autre thread afin de ne pas bloquer la boucle de lecture. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 236 mensajes |
|
| Publicado el 04,enero 2019 - 13:25 |
Bonjour, Merci pour ta réponse et ta proposition de code. Ce que j'utilise n'est que ce qui est fourni en exemple par PCsoft, à savoir ceci:
sMessage est une chaîne sIp est une chaîne = SocketClientInfo(sNomConnexion,SocketAdresse) // Lecture des messages BOUCLE SI SignalAttend("TERM",5) ALORS SORTIR MettreAJourTable(sNomConnexion,sIp) sMessage = SocketLit(sNomConnexion,Faux,2000) //Trace("1 Autre cas : "+ sNomConnexion) SELON sMessage CAS "BYE" : // Sortie de l'utilisateur Trace("Passage Bye") SORTIR CAS "" : // Ce n'est pas une lecture bloquante, on retourne dans la boucle Multitâche(-2) Trace("Passage vide") AUTRES CAS : // Message à poster Trace(sMessage) GestionMessage(sMessage) SI sMessage<>"" ALORS Trace("Trame reçue" + sMessage) FIN FIN
J'ai ajouté des Traces pour voir ce qui passait mais c'est à chaque fois le CAS "" qui est pris en compte.
Je vais essayer tes codes et je reviens vers toi. Merci |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 236 mensajes |
|
| Publicado el 04,enero 2019 - 13:44 |
Re bonjour,
Je viens de tester ta proposition de code et j'ai 2 messages d'erreurs:
1 - mon WD23 ne connait pas le type UDPPacket. 2 - l'identificateur _AddPacketToPool(pack) est inconnu ou inaccessible.
Qu'est ce que j'aurais loupé ?
Au plaisir de te lire. merci |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,enero 2019 - 15:09 |
Bonjour,
Avez-vous penser à ajouter le ligne :
SocketChangeModeTransmission(sNomConnexion, SocketSansMarqueurFin)
Cette ligne est obligatoire pour dialoguer avec des applications non PCSoft il faut mettre cette ligne juste après SocketConnect pour un client ou SocketCree pour un serveur.
Franck. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 236 mensajes |
|
| Publicado el 04,enero 2019 - 15:36 |
Bonjour Franck, Oui, j'ait testé aussi SocketChangeModeTransmission(sNomConnexion, SocketSansMarqueurFin) mais les codes que j'ai mis plus haut ne donne rien, alors que l'appli que SocketSniffer me confirme la connexion du client au socket et le passage des données. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 04,enero 2019 - 17:12 |
Bonjour Fred,
En effet, UDPPacket est une classe que j'ai créé et _AddPacketToPool est une methode que j'ai aussi créé. Mais c'etait juste pour te montrer le principe :
Ecoute dans un thread en boucle infini -> stockage dans un buffer -> Envoi dans une pile de buffer qui sera traitée par un autre thread.
Essaye avec ton code et remplace le type chaine, par buffer. Il se peut qu'il ai des caractères non imprimables qui ne passent pas dans ta chaine. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 236 mensajes |
|
| Publicado el 04,enero 2019 - 18:30 |
Bonsoir Francois, OK, merci pour tes explications. Je comprends mieux pourquoi chez moi ça ne fonctionne pas. Puis je te demander de partager la classe que tu as creé pour UDPPacket et ta methode, afin que je puisse faire fonctionner ta routine chez moi et que je puisse avancer dans mon soucis? En te remerciant par avance. Fred2355 |
| |
| |
| | | |
|
| | | | |
| | |
|