Hallo, erst mal Danke für die Lösung des Problems.
Nun bitte ich erneut um Hilfe.
Wenn der Sterver gestartet ist mit Client AAA und Client BBB, funkioniert alles tadellos.
Schließe ich jetzt Client BBB und starte Client BBB erneut (also der 2. Start).
Schicke ich nun von Client AAA eine Nachricht an Client BBB erscheint diese doppelt und umgekehrt.
Schließe ich jetzt Client BBB ein zweites mal und starte ein drittes mal, so erscheint die Nachricht von Client AAA auf Client BBB auch dreimal.
Meine Vermutung ist, dass der Speicher nicht richtig gelöscht wird, den Sinn von AllocateMemory und FreeMemory habe ich verstanden, jedoch verstehe ich nicht diese Phänonem.
Vielen Dank für eure Mühe im voraus.
SERVER
Code: Alles auswählen
;Server
NewList Client.l()
InitNetwork()
CreateNetworkServer(0,6784)
OpenWindow(1,0,0,400,300,"Server", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ; OpenWindow(1,0,0,400,300,"Server", #PB_Window_Invisible)
;CreateGadgetList(WindowID(1)) ; Ist das Richtig, das diese Fuktion veraltet ist und aus dem Script entfernt werden kann ???
ButtonGadget(1,390,340,100,20,"Senden")
StringGadget(3, 10, 340, 370, 20, "")
EditorGadget(2, 10, 10, 480, 300)
*Buffer = AllocateMemory(1024)
Repeat
;Fenster
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow
quit = 1
EndIf
If EventID = #PB_Event_Gadget
If EventGadget()=1
Text$ = GetGadgetText(3)
ForEach Client()
SendNetworkString(Client(), "SERVER : " +Text$)
Next
SetGadgetText(3, "")
EndIf
EndIf
If EventID = 0
Delay(100)
EndIf
;Server
SEvent.l = NetworkServerEvent()
;If SEvent
ClientID = EventClient()
Select SEvent
Case 1
AddGadgetItem(2, -1, "NEUER CLIENT ONLINE")
AddElement(Client())
Client() = ClientID
SendNetworkString(ClientID, "Neuer Client ist online, Gruss Server")
;1: Ein neuer Client wurde mit dem Server verbunden
Case 2
;MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
ReceiveNetworkData(ClientID, *Buffer, 1024)
AddGadgetItem(2, -1, PeekS(*Buffer))
ForEach Client()
If Client() <> ClientID
SendNetworkString(Client(), PeekS(*Buffer))
EndIf
Next
;MessageRequester("Info", "String: "+PeekS(Buffer), 0)
; 2 : Roh-Daten wurden empfangen (können mittels ReceiveNetworkData() gelesen werden,)
;Case 3
;MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
;ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
; 3 : Eine Datei wurde empfangen (kann mittels ReceiveNetworkFile() gelesen werden)
Case 4
;MessageRequester("Member offline", "Client "+Str(ClientID)+" Hat die verbindung unterbrochen ", 0)
EndSelect
FreeMemory(*Buffer)
*Buffer = AllocateMemory(1024)
Until quit=1
FreeMemory(*Buffer)
*Buffer = AllocateMemory(1024)
End
Client
Code: Alles auswählen
ip$ = "192.168.0.101"
*TCPBuffer = AllocateMemory(1024)
OpenConsole()
ConsoleTitle ("Mister Stars")
ConsoleColor(13,0)
Name$="Client AAA"
ClearConsole()
InitNetwork()
PrintN ("Verbindung zum Netzwerk hergestellt")
ClientConnectionID = OpenNetworkConnection(ip$,6784)
If ClientConnectionID=0
ConsoleColor(12,0)
PrintN("Server Offline,Verbindung zum Server nicht hergestellt")
Input()
Else
PrintN("Server Online,Verbindung zum Server hergestellt")
Repeat
Select NetworkClientEvent(ClientConnectionID)
Case 2
TCPBufferLength = ReceiveNetworkData(ClientConnectionID, *TCPBuffer, 1024)
Text$ = PeekS(*TCPBuffer,TCPBufferLength)
PrintN(Text$)
Text$=""
EndSelect
Inkey$ = Inkey()
Inkey = Asc(Inkey$)
Select Inkey
Case 0
;nix machen
Case 13
PrintN ("")
If Nachricht$ <> "quit"
SendNetworkString(ClientConnectionID, Name$ +" : "+Nachricht$)
Nachricht$ = ""
Else
quit = 1
EndIf
Default
key$ = Left(Inkey$,1)
Nachricht$ + key$
Print(key$)
EndSelect
Delay(10)
Until quit
FreeMemory(*TCPBuffer)
EndIf
CloseConsole()
End
Es kommt immer auf die Sichtweise des Betrachters an.