Server:
Code: Alles auswählen
Enumeration
#Listview_0
#String_0
#Button_0
EndEnumeration
Procedure Open_window()
If OpenWindow(0, 256, 211, 315, 279, "Server", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(0))
ListViewGadget(#Listview_0, 0, 0, 315, 250)
StringGadget(#String_0, 0, 255, 235, 20, "")
ButtonGadget(#Button_0, 240, 255, 75, 20, "Senden")
EndIf
EndIf
EndProcedure
InitNetwork()
If ExamineIPAddresses()
IP.l = NextIPAddress()
EndIf
If CreateNetworkServer(0, 6654)
Open_window()
AddGadgetItem(#Listview_0,-1,"Server Online Listening on IP (" + IPString(IP) + ")")
Repeat
Event = WindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
String$=GetGadgetText(#String_0)
SetGadgetText(#String_0,"")
If ClientID.l
SendNetworkData(ClientID.l, @String$, Len(String$))
Endif
EndIf
EndIf
Select NetworkServerEvent()
Case 0
Delay(1)
Case 1
AddGadgetItem(#Listview_0,-1,"Ein neuer Client hat Connectet")
ClientID.l = EventClient()
Case 2
*buffer = AllocateMemory(2000)
length.l = ReceiveNetworkData(ClientID, *buffer, 2000)
String$ = PeekS(*buffer, 2000)
AddGadgetItem(#Listview_0,-1,"Received:" + String$)
FreeMemory(*buffer)
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
End
Client:
Code: Alles auswählen
Enumeration
#Listview_0
#String_0
#Button_0
EndEnumeration
Procedure Open_window()
If OpenWindow(0, 256, 211, 315, 279, "Client", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(0))
ListViewGadget(#Listview_0, 0, 0, 315, 250)
StringGadget(#String_0, 0, 255, 235, 20, "")
ButtonGadget(#Button_0, 240, 255, 75, 20, "Senden")
EndIf
EndIf
EndProcedure
If InitNetwork() = 0
MessageRequester("Error", "Error")
EndIf
ip$ = "127.0.0.1"
ConnectionID = OpenNetworkConnection(ip$, 6654)
If ConnectionID
Open_window()
Repeat
Event = WindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
String$=GetGadgetText(#String_0)
SetGadgetText(#String_0,"")
SendNetworkData(ConnectionID, @String$, Len(String$))
EndIf
EndIf
Sev=NetworkClientEvent(ConnectionID)
If Sev = #PB_NetworkEvent_Data
*Buffer=AllocateMemory(1000)
ReceiveNetworkData(ConnectionID, *Buffer, 1000)
AddGadgetItem(#Listview_0,-1,PeekS(*Buffer))
FreeMemory(*Buffer)
ElseIf Sev = 0
Delay(1)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
End
Ich denke bei näherer Betrachtung des Codes wirst du festellen wie ich das Regele.
Vor jedem Empfang einer "Nachricht" reservire ich mir etwas Speicher, schreibe in diesen den Empfang, gebe ihn aus & lösche dann den Speicherbereich wieder.
Keine Ahnung ob meine Methode richtig ist, aber bei mir hat sie bissher immer prima funktioniert
Gruß Marvin
Edit://WaitWindowEvent => WindowEvent (danke HeXor, hab ich verpeilt)