PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Socket avec données binaires
Socket avec données binaires
Iniciado por Mouhi, nov., 16 2018 12:44 AM - 4 respostas
Membro registado
81 mensagems
Popularité : +7 (7 votes)
Publicado em novembro, 16 2018 - 12:44 AM
Bonjour,

J'ai un appareil qui m'envoie des données binaires, mais je n'arrive pas à les afficher en Hexadécimal,

Voici mon code :

LOOP
IF SocketWaitForConnection("PrincipalSocket") THEN
bufCanal is Buffer = SocketAccepte("PrincipalSocket") // j'ai essayé sCanal is String
Trace("Connexion Requested by : "+bufCanal)
bufMsg is Buffer = SocketLit(bufCanal,Faux,10000)
FOR i = 1 _TO_ Taille(bufMsg)
Trace(Val(bufMsg[[i]],"x") + " ")
END
END
END


Le premier trace se déclenche mais pas la boucle (mon Buffer est vide),
Pourtant quand j'utilise l'outil Hercules pour tester l’appareil je reçois correctement des données binaires,
Quelqu'un a une idée ?

Merci d'avance,
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em novembro, 16 2018 - 10:26 AM
Coucou,

SocketLit :
TANTQUE SocketExiste("MonSocket") = Vrai
sMsg est une chaîne = SocketLit("MonSocket", Vrai)
SI sMsg <> "" ALORS
ListeAjoute(LISTE_Messages, Maintenant() + " " + sMsg)
FIN
FIN

Reference: https://doc.pcsoft.fr/fr-FR/?3070014&name=socketlit_fonction

BufferVersHexa :
s est une chaîne UNICODE = "abdcefghijkl"
Trace(BufferVersHexa(s))
// affiche :

// 61 00 62 00 64 00 63 00 65 00 66 00 67 00 68
// 69 00 6A 00 6B 00 6C 00

Reference: http://doc.pcsoft.fr/?1000019916&verdisp=200

WLTips: Composants (WINDEV) : WD Trace Socket

--
In üs we trust - #92i - #LaPiraterieNestJamaisFinie
Mensagem modificada, novembro, 16 2018 - 10:29 AM
Membro registado
81 mensagems
Popularité : +7 (7 votes)
Publicado em novembro, 17 2018 - 2:31 AM
Salut :)

Pfff, je galère toujours avec mon problème :(

Merci Charly, j'ai déjà essayé BufferVersHexa, même sans conversion en Hexa il est sensé afficher quelques chose (du charabia de la suite binaire) mais tout a fait vide, je viens d'installer Wireshark pour analyser un peu le traffic réseau, et voilà mon constat : Je reçois un premier paquet d'initialisation (paquet SYN) de mon appareil (traceur GPS), puis le programme envoie un ACK SYN (c'est logique), puis le traceur envoie ACK (c'est logique), jusqu'ici aucun souci avec l'initialisation de la connexion TCP entre le client et le serveur.

Une fois l'initialisation est terminée le traceur envoie un paquet avec des données, ex IMEI, ...etc. (voir l'image, length=17).

Très vite un ACK est envoyé (length=0) avant même l'exécution de la fonction SocketAccepte(), donc lorsque j'essaye de lire les données (ex : IMEI reçues dans le paquet précédent) bein je trouve zéro length (aucune donnée) c'est surement à cause du dernier ACK envoyé avant que je lis les données du canal I/O.

Voilà mon code rien de spécial :

BOUCLE
SI SocketAttendConnexion("Socket") ALORS
//sCanal est chaîne = SocketAccepte("Socket")
//ThreadExécute(sCanal, threadNormal, MessageReceived, sCanal)
FIN
FIN


Comme vous pouvez le voir, les 2 lignes en commentaires, et voilà le resultat Wireshark :




C'est étrange n'est-ce pas ? ou quelque chose m'échappe ?

Merci pour votre aide,
Mensagem modificada, novembro, 17 2018 - 2:32 AM
Membro registado
12 mensagems
Publicado em novembro, 22 2018 - 8:37 PM
Salut, essai de jouer avec les SocketOption et le mode de transmission.
exemple
Socket.Option=SocketNagleOff
SocketChangeModeTransmission(gsNom_du_socket,SocketSansMarqueurFin)

j'ai eu le même genre de problème a communiquer avec un automate programmble.
Membro registado
81 mensagems
Popularité : +7 (7 votes)
Publicado em novembro, 23 2018 - 11:10 PM
Salut :merci:

Effectivement c'est à cause du mode de transmission,

C'est en ordre maintenant 8)

Merci....