Code : Tout sélectionner
#NoTrayIcon
#include <EditConstants.au3>
#include <GuiConstantsEx.au3>
#include <GUIEdit.au3>
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.8.1
Auteur: TT22
Fonction du Script :
Exemple de client de chat TCP.
#ce ----------------------------------------------------------------------------
; Déclaration des variables...
Global Const $IP = InputBox("Client", "Entrez l'adresse IP du serveur :")
If @error Then Exit
Global Const $PORT = 2319
Global Const $USER = InputBox("Client", "Entrez votre nom d'utilisateur :")
If @error Then Exit
Global Const $SIZE = 1048576
Global Const $REFRESH = 5000
; Création de la GUI...
$Gui = GUICreate("Chat simple", 300, 390)
$Edit = GUICtrlCreateEdit("", 10, 10, 280, 280, BitOR($ES_READONLY,0x00200000))
$Input = GUICtrlCreateInput("", 10, 300, 280, 20)
$Button = GUICtrlCreateButton("Envoyer", 10, 330, 280, 50)
GUISetState(@SW_SHOW, $Gui)
; Récupère les messages...
$Msg = _TCP("GET"&@CRLF, $IP, $PORT, $Size)
; Cherche une erreur...
If $Msg = "0" Or StringLeft($Msg, 6) = "erreur" Then
MsgBox(16, "Client : Erreur", $Msg)
Else
GUICtrlSetData($Edit, $Msg)
_GUICtrlEdit_LineScroll($Edit, 0, _GUICtrlEdit_GetLineCount($Edit))
$Len = StringLen($Msg)
_GUICtrlEdit_SetSel($Edit,$Len,$Len)
EndIf
$Timer = TimerInit()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button
; Lit le message...
$Msg = GUICtrlRead($Input)
If $Msg <> "" And $Msg <> "empty" Then
; Envoie le message...
$Answer = _TCP("SEND"&@CRLF&$USER&@CRLF&$Msg, $IP, $PORT, 1024)
; Cherche une erreur...
If $Answer = "0" Or StringLeft($Answer, 6) = "erreur" Then MsgBox(16, "Client : Erreur", $Answer)
; Récupère les messages...
$Msg = _TCP("GET"&@CRLF, $IP, $PORT, $Size)
; Cherche une erreur...
If $Msg = "0" Or StringLeft($Msg, 6) = "erreur" Then
MsgBox(16, "Client : Erreur", $Msg)
Else
GUICtrlSetData($Edit, $Msg)
_GUICtrlEdit_LineScroll($Edit, 0, _GUICtrlEdit_GetLineCount($Edit))
$Len = StringLen($Msg)
_GUICtrlEdit_SetSel($Edit,$Len,$Len)
EndIf
; Vide l'input...
GUICtrlSetData($Input, "")
ElseIf $Msg = "empty" Then
; Envoie la demande de vidage...
$Answer = _TCP("EMPTY"&@CRLF, $IP, $PORT, 1024)
; Cherche une erreur...
If $Answer = "0" Or StringLeft($Answer, 6) = "erreur" Then MsgBox(16, "Client : Erreur", $Answer)
; Récupère les messages...
$Msg = _TCP("GET"&@CRLF, $IP, $PORT, $Size)
; Cherche une erreur...
If $Msg = "0" Or StringLeft($Msg, 6) = "erreur" Then
MsgBox(16, "Client : Erreur", $Msg)
Else
GUICtrlSetData($Edit, $Msg)
_GUICtrlEdit_LineScroll($Edit, 0, _GUICtrlEdit_GetLineCount($Edit))
$Len = StringLen($Msg)
_GUICtrlEdit_SetSel($Edit,$Len,$Len)
EndIf
; Vide l'input...
GUICtrlSetData($Input, "")
EndIf
EndSwitch
; Si le temps de rafraichissement est écoulé...
If TimerDiff($Timer) >= $REFRESH Then
; Récupère les messages...
$Msg = _TCP("GET"&@CRLF, $IP, $PORT, $Size)
; Cherche une erreur...
If $Msg = "0" Or StringLeft($Msg, 6) = "erreur" Then
MsgBox(16, "Client : Erreur", $Msg)
Else
GUICtrlSetData($Edit, $Msg)
_GUICtrlEdit_LineScroll($Edit, 0, _GUICtrlEdit_GetLineCount($Edit))
$Len = StringLen($Msg)
_GUICtrlEdit_SetSel($Edit,$Len,$Len)
EndIf
$Timer = TimerInit()
EndIf
WEnd
; Fonction d'envoi de requête TCP et d'attente de réponse...
Func _TCP ( $_Request, $_IP, $_Port, $_Size)
Local $_Socket, $_Answer
TCPStartup()
$_Socket = TCPConnect($_IP, $_Port)
If @error Then Return 0
TCPSend($_Socket, StringToBinary($_Request,4))
If @error Then Return 0
While Not $_Answer
$_Answer = TCPRecv($_Socket,$_Size)
If @error Then Return 0
WEnd
TCPCloseSocket($_Socket)
TCPShutdown()
Return $_Answer
EndFunc