J'ai en effet regardé le code, mais il ne m'a pas aidé...
Voici les sources :
Côté client :
-- Chatroom.pb :
Code : Tout sélectionner
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
IncludeFile "Common.pb"
Open_chat()
AddKeyboardShortcut(#chat, #PB_Shortcut_Control | #PB_Shortcut_Return, #send)
SetGadgetState(#IP, MakeIPAddress(127, 0, 0, 1))
*Buffer = AllocateMemory(65536)
Global hConnect
InitNetwork()
hConnect = OpenNetworkConnection(IPString(GetGadgetState(#IP)), Val(GetGadgetText(#port)))
SetGadgetText(#connect, "Déconnexion")
Repeat
Delay(1)
Event = WindowEvent()
Debug NetworkClientEvent(hConnect)
;Debug ReceiveNetworkData(hConnect, *Buffer, 65536)
;st$ = PeekS(*Buffer, Len(PeekS(*Buffer))+4,#PB_UTF8)
;FreeMemory(*Buffer)
;*Buffer = AllocateMemory(65536)
;SetGadgetText(#chatroom, GetGadgetText(#chatroom)+Chr(10)+Chr(13)+st$)
If Event = #PB_Event_Gadget
Select EventGadget()
Case #connect
text$ = GetGadgetText(#connect)
If text$ = "Connexion"
hConnect = OpenNetworkConnection(IPString(GetGadgetState(#IP)), Val(GetGadgetText(#port)))
If hConnect
SetGadgetText(#connect, "Déconnexion")
Else
MessageRequester("Erreur !", "La connexion a échoué !")
EndIf
Else
CloseNetworkConnection(hConnect)
SetGadgetText(#connect, "Connexion")
EndIf
Case #send
text.s = GetGadgetText(#message)
SendNetworkString(hConnect, text)
EndSelect
EndIf
Until WindowEvent() = #PB_Event_CloseWindow
If hConnect
CloseNetworkConnection(hConnect)
EndIf
CloseWindow(#chat)
End
-- Common.pb :
Code : Tout sélectionner
;
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#chat
EndEnumeration
;- Gadget Constants
;
Enumeration
#send
#chatroom
#pseudo
#tPseudo
#message
#IP
#tIP
#tPort
#port
#connect
EndEnumeration
;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Trebuchet MS", 10)
Procedure Open_chat()
If OpenWindow(#chat, 216, 0, 640, 480, "IrisChatroom", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
If CreateGadgetList(WindowID(#chat))
ButtonGadget(#send, 275, 80, 95, 25, "Envoi", #PB_Button_Default)
SetGadgetFont(#send, FontID1)
EditorGadget(#chatroom, 0, 110, 640, 340, #PB_Editor_ReadOnly)
SetGadgetFont(#chatroom, FontID1)
StringGadget(#pseudo, 355, 455, 195, 20, "")
TextGadget(#tPseudo, 280, 455, 80, 20, "Pseudo :", #PB_Text_Center)
SetGadgetFont(#tPseudo, FontID1)
EditorGadget(#message, 0, 0, 640, 75)
SetGadgetFont(#message, FontID1)
IPAddressGadget(#IP, 40, 455, 115, 20)
TextGadget(#tIP, 0, 455, 40, 20, "IP :", #PB_Text_Center)
SetGadgetFont(#tIP, FontID1)
TextGadget(#tPort, 165, 455, 40, 20, "Port :", #PB_Text_Center)
SetGadgetFont(#tPort, FontID1)
StringGadget(#port, 210, 455, 70, 20, "6279", #PB_String_Numeric)
SetGadgetFont(#port, FontID1)
ButtonGadget(#connect, 555, 455, 80, 20, "Connexion")
SetGadgetFont(#connect, FontID1)
EndIf
EndIf
EndProcedure
Côté serveur :
-- General.pb :
Code : Tout sélectionner
IncludeFile "Include.pb"
If InitNetwork() = 0
MessageRequester("Erreur", "Impossible d'initialiser le serveur !", 0)
End
EndIf
Global boolState = 0, itemSel = 0
Open_serv()
HideWindow(#serv, boolState)
AddSysTrayIcon(1, WindowID(#serv), LoadImage(0, "16.ico"))
SysTrayIconToolTip(1, "Serveur chat")
Port = 6279
*Buffer = AllocateMemory(65536)
If CreateNetworkServer(0, Port)
MessageRequester("Serveur", "Serveur créé (Port "+Str(Port)+").", 0)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1 ;Nouveau client
Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un nouveau client s'est connecté : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
AddGadgetItem(#text, -1, Date$)
SetGadgetState(#text, itemSel)
itemSel = itemSel + 1
Case 2 ;Paquet reçu
Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client a envoyé un paquet : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
;ReceiveNetworkData(ClientID, *Buffer, 65536)
;Date$ = Date$+" -> "+PeekS(*Buffer, Len(PeekS(*Buffer))+4,#PB_UTF8)
;FreeMemory(*Buffer)
;*Buffer = AllocateMemory(65536)
AddGadgetItem(#text, -1, Date$)
SetGadgetState(#text, itemSel)
itemSel = itemSel + 1
Case 3 ;Fichier reçu
Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client a envoyé un fichier : ", Date()) + IPString(GetClientIP(ClientID)) + " ->ID : "+Str(ClientID)
AddGadgetItem(#text, -1, Date$)
ReceiveNetworkFile(ClientID, SaveFileRequester("Où enregistrer ?", "C:\", "*.*", 1))
SetGadgetState(#text, itemSel)
itemSel = itemSel + 1
Case 4 ;Client parti
Date$ = FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss >> Un client s'est déconnecté", Date()) + " ->ID : "+Str(ClientID)
AddGadgetItem(#text, -1, Date$)
SetGadgetState(#text, itemSel)
itemSel = itemSel + 1
EndSelect
EndIf
Event = WindowEvent()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_LeftDoubleClick
boolState = boolState XOr 1
HideWindow(#serv, boolState)
EndIf
EndIf
If Event = #PB_Event_CloseWindow
CloseWindow(#serv)
Quit = 1
EndIf
If Event = #PB_Event_SizeWindow
ResizeGadget(#text, 0, 0, WindowWidth(#serv), WindowHeight(#serv))
EndIf
Delay(1)
Until Quit = 1
CloseNetworkServer(0)
Else
MessageRequester("Erreur", "Impossible de créer le serveur. Il est probable que le port soit déjà utilisé.", 0)
EndIf
End
-- Include :
Code : Tout sélectionner
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#serv
EndEnumeration
;- Gadget Constants
;
Enumeration
#text
EndEnumeration
Procedure Open_serv()
If OpenWindow(#serv, 5, 5, 350, 280, "Serveur IrisChatroom version 1.0.0", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#serv))
ListViewGadget(#text, 0, 0, 350, 280)
EndIf
EndIf
EndProcedure
Bon courage
Et merci pour votre aide !