Hallo Heinz,
so wie Deine Client aufgebaut ist, wäre es sehr unwahrscheinlich dass Du damit Daten empfängst, denn Du fragst die Daten ja nur DIREKT nach dem Öffnen der Connection ab - aber niemals mehr danach.
Genau wie Windows-Events müssen Netztwerk-Events jedoch permanent (z.B. in der Window-Event Schleife oder einem Thread) abgefragt werden, da man ja nie den Zeitpunkt weiß, WANN sie auftreten.
Anbei mal eine kleine Abänderung Deines Clients, so wie er evtl. funktionieren könnte (ist jedoch ungetestet, da ich ja Deinen Server nicht habe):
Code: Alles auswählen
Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l, *DataBuffer.l
*DataBuffer = AllocateMemory(343)
If OpenWindow(0, 10, 10, 500, 320, "Client (kann auch mehrfach gestarted werden)", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(1,5, 10,100, 20, "Ende")
ButtonGadget(2,120, 10, 100, 20, "Connect")
ButtonGadget(3,235, 10, 140, 20, "Disconnect")
EditorGadget(4, 10, 40, 480, 270)
SetGadgetText(4, "Dieser Client kann auch mehrfach gestartet werden um damit"+#CR$+"mehrere, gleichzeitige Verbindungen zum Server auf zu bauen.")
Quit = 0
Port = 6832
status = 0
If InitNetwork() = 0
MessageRequester("Info", "Kein Netzwerk !", #PB_MessageRequester_Ok)
End
EndIf
Repeat
; ----- Window-Events bearbeiten
EventID.l = WaitWindowEvent(10) ; <===== Timeout ist wichtig, damit auch die NetzwerkEvents permanent ausgewertet werden können.
Select EventID
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
; Ende - Button gedrückt
Quit = 1
Case 2
; Connect - Button gedrückt
If Not status
conID = OpenNetworkConnection("127.0.0.1", Port)
If conID
status = 1
SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connected -" + #CR$)
; ;MessageRequester("Info", "Connect !", 0)
; cEvent = NetworkClientEvent(conID)
; If cEvent = #PB_NetworkEvent_Data
; FillMemory(*DataBuffer, 343)
; Result = ReceiveNetworkData(ConID, *DataBuffer, 343)
; SetGadgetText(4, PeekS(*DataBuffer, 343))
;
; EndIf
EndIf
EndIf
Case 3
;Disconnect
If status <> 0
CloseNetworkConnection(conID)
status = 0
SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connection closed -" + #CR$)
EndIf
EndSelect
EndSelect
; ----- Netztwerk-Events bearbeiten
If status
cEvent = NetworkClientEvent(conID)
Select cEvent
Case #PB_NetworkEvent_Data
Repeat
Result = ReceiveNetworkData(ConID, *DataBuffer, 343)
SetGadgetText(4, GetGadgetText(4) + PeekS(*DataBuffer, Result))
Until Result < 343 ; Until Received Network Data smaller than Buffersize
EndSelect
EndIf
Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
FreeMemory(*DataBuffer)
End
[EDIT]: Hab noch schnell 'nen kleinen Server gebastelt um's zu testen.
Scheint alles so zu funktionieren wie es soll.
Server:
Code: Alles auswählen
EnableExplicit
InitNetwork()
NewList ConnectedClients.i()
Define Event, NetEvent, NetClient, Connected, n
If Not CreateNetworkServer(0, 6832 , #PB_Network_TCP)
Debug "Netzwerk-Server konnte nicht eingerichtet werden"
End
EndIf
OpenWindow(0,0,0,280,100, "Netzwer-Server", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
EditorGadget(0,5,5, 190,65)
ButtonGadget(1,5,76,190,20, "Senden")
ListIconGadget(2,200,5,75,90,"Clients",71)
SetGadgetText(0, "Test-Text !!!" + #CR$)
StickyWindow(0, #True)
Repeat
Event = WaitWindowEvent(10)
Select Event
Case #PB_Event_Gadget
If EventGadget() = 1
ForEach ConnectedClients()
SendNetworkString(ConnectedClients(), GetGadgetText(0))
Next
EndIf
EndSelect
NetEvent = NetworkServerEvent()
Select NetEvent
Case #PB_NetworkEvent_Connect
NetClient = EventClient()
AddElement(ConnectedClients())
ConnectedClients() = NetClient
AddGadgetItem(2,-1, Str(NetClient))
Case #PB_NetworkEvent_Disconnect
NetClient = EventClient()
; ----- Client aus LinkedList der verbundenen Clients entfernen
ForEach ConnectedClients()
If ConnectedClients() = NetClient
DeleteElement(ConnectedClients())
Break
EndIf
Next
; ----- Client aus ListIconGadget entfernen
For n = 1 To CountGadgetItems(2)
If Val(GetGadgetItemText(2, n-1, 0)) = NetClient
RemoveGadgetItem(2, n-1)
Break
EndIf
Next
EndSelect
Until Event = #PB_Event_CloseWindow
ForEach ConnectedClients()
SendNetworkString(ConnectedClients(), #CR$+"- Server closed -")
Next
CloseNetworkServer(0)
Gruß und viel Erfolg.
