Plusieurs remarque concernant cet UDF:
- D'abord, ce qui peut être déroutant quand on ne le sait pas, c'est que le SocketID utiliser dans les fonctions de l'UDF
n'a rien à voir avec le hSocket utiliser dans les fonctions
TCP d'AutoIt.
Voyer
ce post, et ma réponse en dessou
- Ensuite, le même membre m'a demander comment envoyer des plusieurs données en une seul fois, je lui ai expliqué
ici, et j'en ai profiter pour lui montrer comme envoyer le plus simplement du monde des fichiers entier! Et je pense que c'est là, la grande force de mon UDF!!! (sans vouloir me venter bien sur!

)
Edit: Ce 2e point m'a donné une idée, faire des fonctions générique de gestion de ce genre de cas:
une fonction pour créer un packet à envoyer, avec nom du packet, des paramètres, et un contenu
une autre pour décortiquer un packet reçu, et en extraire les éléments sus-cités.
Ces fonctions se trouvent aussi dans le zip, dans le fichier helpers.au3
► Afficher le texteLes fonctions
Code : Tout sélectionner
#cs
Function: _TCP_GetCmd
Analyse a packet created by <_TCP_MakeCmd>, and extract the packet name, the parameters, and the data
Syntax:
>_TCP_GetCmd($rData, ByRef $sCmd, ByRef $aParams, ByRef $Data)
Parameters:
$rData - The packet
$sCmd - Will be filled with the packet name
$aParams - Will be filled with a 1-Based array, where Elem[0] is the number of parameters, and
the other elements Elem[x], will be the parameters
$Data - Will be filled with the packet's Data
Return:
Succes - 1
Failed - 0 And set @error = 1 if the packet isn't valid
#ce
Func _TCP_GetCmd($rData, ByRef $sCmd, ByRef $aParams, ByRef $Data)
$rData = StringSplit($rData, Chr(29), 1)
If $rData[0] <> 3 Then Return SetError(1, 0, 0)
; ---
$sCmd = $rData[1]
$Data = $rData[3]
$aParams = StringSplit($rData[2], Chr(31), 1)
; ---
Return 1
EndFunc
#cs
Function: _TCP_MakeCmd
Create a packet to be sent over TCP, can have:
- A command name
- A variable number of parameters
- Some Data
Syntax:
>_TCP_MakeCmd($sCmd, $aParams, $Data)
Parameters:
$sCmd - Command name
$aParams - Eiter an 0-Based array containing the parameters, or a string with the parameters
delimited by Chr(31)
$Data - The data of the packet, string, binary string...
Return:
Succes - The packet
#ce
Func _TCP_MakeCmd($sCmd, $aParams, $Data)
If IsArray($aParams) Then
Local $str = ""
For $elem In $aParams
$str &= $elem & Chr(31)
Next
$aParams = StringTrimRight($str, 1)
EndIf
; ---
Return $sCmd & Chr(29) & $aParams & Chr(29) & $Data
EndFunc
; ##############################################################
#include <Array.au3>
; on créer un packet typique de fichier, avec comme nom "file", comme parametres le nom du fichier et sa taille, et comme
; données, le contenue du fichier
$send = _TCP_MakeCmd("file", @ScriptName & Chr(31) & FileGetSize(@ScriptFullPath), FileRead(@ScriptFullPath))
; ###
; Ici normalement le packet $send devrai être envoyé par TCP, puis reçu
; ###
Local $cmd, $params, $data
; on recoit le packet, et on l'analyse et décortique
_TCP_GetCmd($send, $cmd, $params, $data)
; affichage du contenu du packet
ConsoleWrite($cmd & @CRLF)
_ArrayDisplay($params)
ConsoleWrite($data & @CRLF)
Au fait, l'UDF a été mis à jour! voir le premier post