Re: Client/Server in einem Programm, wie geht das mit den Ev
Verfasst: 07.02.2012 13:48
In Ermangelung einer ordentlichen Dokumentation (nicht jeder hat "Zusi") ist es uns unmöglich ein Beispiel zu generieren,
das sich zumindest mit dem Server verbinden kann, da wir nicht GENAU wissen, was der Server für Datenpakete erwünscht
oder verschickt.
Das Beispiel, schnell aus der PB-Hilfe (Network - Client.pb) geschraubt, soll es stark vereinfacht zeigen
wie es gehen könnte...
das sich zumindest mit dem Server verbinden kann, da wir nicht GENAU wissen, was der Server für Datenpakete erwünscht
oder verschickt.
Das Beispiel, schnell aus der PB-Hilfe (Network - Client.pb) geschraubt, soll es stark vereinfacht zeigen
wie es gehen könnte...
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
#ACK_HELLO = $00010102
#SV_ACK_HELLO = $000200
Procedure SendStringPaket(ConnectionID, Typ, String.s)
Protected *Buffer, i
If Len(String)>0 And Len(String)<256 ; String muss eine Länge zwischen 0 und 256 Zeichen haben
*Buffer = AllocateMemory(StringByteLength(String)+4) ; Speicher anmelden (1 Long und Stringkennung + StringLänge)
If *Buffer ; Wenn Speicher anmelden erfolgreich
PokeL(*Buffer, Typ) ; Den Typ "Poken" z.B. ACK_Hello
PokeB(*Buffer+4, StringByteLength(String)) ; Länge des Strings an den Anfang "Poken"
For i = 1 To Len(String) ; Den String dahinter "Poken") ohne das CHR(0) am Ende
PokeB(*Buffer + 4 + i, Asc(Mid(String, i, 1)))
Next i
If ConnectionID ; Ist die Verbindung gültig ?
SendNetworkData(ConnectionID, *Buffer, MemorySize(*Buffer)) ; Senden des Strings
EndIf
FreeMemory(*Buffer) ; Speicher wieder freigeben
EndIf
EndIf
EndProcedure
*Empfang = AllocateMemory(100) ; Speicher anmelden um Daten zu Empfangen.
; Keine Doku, deswegen k.A. wieviel Empfangsbuffer gebraucht wird (Maximale Grösse in Bytes)
Port = 1435 ; Der Port des Zusi Servers
Adresse.s = "127.0.0.1" ; Die IP Adresse des ZUSI Servers ("127.0.0.1" entspricht localhost)
ConnectionID = OpenNetworkConnection(Adresse, Port)
If ConnectionID
Debug "Ich bin mit dem Server verbunden."
; Hier das Hallo senden : FP > SRV 00 01 01 02 08 46 61 68 72 70 75 6C 74 HELLO-Befehl
SendStringPaket(ConnectionID, #ACK_HELLO, "MeinPRG")
; Jetzt auf Antwort warten
RBytes = ReceiveNetworkData(ConnectionID, *Empfang, MemorySize(*Empfang))
If PeekL(*Empfang) = #SV_ACK_HELLO
Debug "Server hat Ok gemeldet"
EndIf
CloseNetworkConnection(ConnectionID)
Else
Debug "Kann den Server nicht finden"
EndIf
End