EasyNetworkManager [Neu: Log - System][V# 1.3.3][Include]

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

Andreas21 hat geschrieben:Hi,

Ich habe die vorlage des Servers und Client mal getestet.
Mir ist ein Problem aufgefallen.

Ab und zu bleibt der Client bei Packet 3 stehen.

Wenn man die verbindung zum Server aufbaut mit dem Client geht es super beim erstenmal.
Beendet man den Client dann und startet ihn neu, sendet der Server ihm zwar die Packete und der Client antwortet auch.
Nur der Server reagiert auf die antwort vom Client nicht.
Problem gefunden. Hab im letzten Moment noch was mit den Flags für Receive/ReceiveFile verpfuscht :oops:

Wurde bereinigt. Download im 1. Post.

Gruß Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Easy Network Manager [Include]

Beitrag von Andreas21 »

Hi,

nun hab ich das Problem wenn ich den Server auf einem Debian 5 Server lauffen lasse und auf Windows den Client, das ich nur das "haha1" bekomme und mehr nicht.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

Andreas21 hat geschrieben:Hi,

nun hab ich das Problem wenn ich den Server auf einem Debian 5 Server lauffen lasse und auf Windows den Client, das ich nur das "haha1" bekomme und mehr nicht.
Hm ... komisches Problem. Hab leider keinen Debian - Server zur Hand um das zu testen. Zwischen Win-Win ist alles ok? Und wenn der Client auf Debian läuft und der Server auf Windows? Das einzige was mir grade einfällt, du könntest probieren in der ENM_Paket.pbi in der Procedure _ENM_ReceivePakets() den Wert von ReceiveBlockSize von 32*1024 auf 8*1024 oder 4*1024 zu ändern, bzw. du könntest dir die Variable GesMemSize im Debugger anzeigen lassen um festzustellen ob es daran liegt das nichtmal alle Daten ankommen oder das Problem an der Paket-Zerlegung liegt.

//Edit:
So, hab jetzt Zugriff auf meinen Source. Kannst du folgende änderungen an der ENM_Pakets.pbi vornehmen und mir das ergebniss mitteilen:

Am Anfang das Source:

Code: Alles auswählen

; ------------------------------------------------------------------------------------
; Paket Settings:

; Wie oft soll probiert werden fehlende Daten nachzuladen?
#ENM_Paket_MaxReloads = 5
; Wie viele Ms soll zwischen den Versuchen gewartet werden?
#ENM_Paket_ReloadDelay = 128
; ------------------------------------------------------------------------------------
Gegebenenfalls noch weiter erhöhen.

Und diese 2 Macros/Proceduren ersetzen:

Code: Alles auswählen

; Reload probieren
Macro _ENM_Paket_TryReload()
  If RLCount < #ENM_Paket_MaxReloads
    RLCount + 1
    Debug "Try Reload " + Str(RLCount)
    Delay(#ENM_Paket_ReloadDelay)
    Continue
  EndIf
EndMacro

; Paket empfangen
Procedure _ENM_ReceivePaket(*ENM.ENM_Data, Connection)
  Protected ReceiveBlockSize, BlockCount, GesMemSize, *PaketMem._ENM_PaketHeader, Rest, Pos, RLCount, *MemBase
  Protected *Paket._ENM_Pakets_Data = _ENM_NewPaket(), *uMem
    
  ReceiveBlockSize =  8*1024 ;32*1024 ; Empfangsblock-größe
  BlockCount = #Null ; Anzahl Blöcke
  GesMemSize = #Null ; GesamtSpeicher-größe
  *PaketMem = #Null ; Speicher
  *MemBase = #Null  ; Speicher - Grundadresse
  
  Repeat
    *PaketMem = *MemBase ; Nötig falls nachgeladen werden muss
    
    Repeat ; Daten einlesen
      *PaketMem = ReAllocateMemory(*PaketMem, (BlockCount + 1)*ReceiveBlockSize)
      Rest = ReceiveNetworkData(Connection, *PaketMem + GesMemSize, ReceiveBlockSize)
      GesMemSize + Rest
      BlockCount + 1
    Until Rest<>ReceiveBlockSize
    
    Debug "GesMem: "+Str(GesMemSize)
    
    *MemBase = *PaketMem ; Nötig zum freigeben + Nachladen
    *PaketMem + Pos ; Nötig Falls Nachgeladen werden muss
    
    If GesMemSize >= SizeOf(_ENM_PaketHeader) ; Haben wir wenigstens einen gültigen Header?
      While GesMemSize-Pos > 0 ; Speicher durchgehen
        If (*PaketMem\Sign!*PaketMem\Sign2) = $FF; Prüfen ...
          If (*PaketMem\Size + Pos + SizeOf(_ENM_PaketHeader)) <= GesMemSize ; Passen die Angaben?
            
            ; Neues Paket erstellen
            AddElement(*Paket\Pakets())
            If *PaketMem\comp ; Kompression
              ; Daten entpacken
              *uMem = zLib_uncompress(*PaketMem + SizeOf(_ENM_PaketHeader), *PaketMem\Size, *PaketMem\cSize)
              If *uMem ; entpacken Ok
                ; Paket schreiben
                *Paket\Pakets()\MemSize = *PaketMem\cSize
                *Paket\Pakets()\Mem = *uMem
                
                ;  Weiterzählen
                Pos + *PaketMem\Size + SizeOf(_ENM_PaketHeader) ; Position anpassen
                *PaketMem + SizeOf(_ENM_PaketHeader) + *PaketMem\Size ; Pointer anpassen
                
              EndIf
            Else ; keine Kompression
              ; Paket schreiben
              *Paket\Pakets()\MemSize = *PaketMem\Size
              *Paket\Pakets()\Mem = AllocateMemory(*Paket\Pakets()\MemSize)
              
              *PaketMem + SizeOf(_ENM_PaketHeader) ; Auf Dateposition gehen
              CopyMemory(*PaketMem, *Paket\Pakets()\Mem, *Paket\Pakets()\MemSize) ; Daten abspeichern
              
              ; Weiterzählen
              *PaketMem + *Paket\Pakets()\MemSize ; Adresse Anpassen
              Pos + *Paket\Pakets()\MemSize + SizeOf(_ENM_PaketHeader) ; Position anpassen
            EndIf
            
          Else ; Reload probieren
            _ENM_Paket_TryReload()
          EndIf
        Else
          Debug "Signature Error"
        EndIf
      Wend
    Else ; Reload probieren
      _ENM_Paket_TryReload()
    EndIf
  Until #True
  
  ResetList(*Paket\Pakets()) ; Liste auf anfang setzen
  FreeMemory(*MemBase) ; Speicher freigebn
  
  ProcedureReturn *Paket ; Pakete zurückgeben
EndProcedure

Ich kann den Fehler hier nicht reproduzieren aber wie gesagt, ich hab auch keinen Debian 5 Server :P

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Easy Network Manager [Include]

Beitrag von Andreas21 »

Geht leider auch nicht.
Der Debian Server ist im internet.
Ich werde mir ein Virtual PC einrichten umd das besser testen zu können.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

Andreas21 hat geschrieben:Geht leider auch nicht.
Der Debian Server ist im internet.
Ich werde mir ein Virtual PC einrichten umd das besser testen zu können.
Ich überprüfe das ganze auch gerade. Ich habe ein paar Probleme festgestellt wenn mehrere Verbindungen zu einem Server in einem Programm laufen. Teiweise bleibt das Programm bei ReceiveNetworkData() (nicht bei meinem abstahierten aus SafeNetwork.pbi sonder beim orginal PB!) stehen ... . Ich bleib da dran.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

Gelöst. Lag an der massiven Parallelisierung, ein Thread hat eine lokale Kopie der Client-Liste erstellt und so ein paar ungültige Einträge abgearbeitet. Probleme lagen alleine am Client-Teil, der Server lief und läuft total stabil, was ja eigentlich das wichtigste ist :D

Es gibt noch einen kleinen Bug das das komplette De Initialisieren des Managers beim Client - Teil stehen bleiben kann, aber das ist kein Major-Bug und das werde ich auch noch demnächst beheben.

Download im 1. Post

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Easy Network Manager [Include]

Beitrag von Andreas21 »

ok :) ich teste es nacher.

edit:
Jetzt leuft :) Danke.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

Re: Easy Network Manager [Include]

Beitrag von Morty »

Moin.

So, bin nun endlich auch mal zum Testen gekommen.
Auf Windows Systemen läuft es bis jetzt ziemlich gut (Linux kann ich leider nicht testen). :allright:

Client: Windows 7 (32 Bit)
Server: Windows Server 2003

Gruß, Morty
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

Schön das es jetzt bei euch beiden funktioniert :D
Hat es sonst jemand getestet und hat Probleme festgestellt, bzw. funktioniert alles?

Ich hab den Source noch ein wenig optimiert, bzw. ein wenig an der Stabilität gearbeitet. Die lange Verzögerung beim Beenden die zeitweise beim Client-Teil auftreten kann ist fast komplett beseitigt. Ich teste das ganze noch ausführlich bis heute Abend und dann gebe ich die neue Version frei :)

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Easy Network Manager [Include]

Beitrag von cxAlex »

So ... Update ist online.

Die an der Stabilität und Performance wurde einiges getan! Auch die Parallelisierung wurde weiter verbessert. Zudem Ist ein ThreadSleep - Modus eingebaut worden der Threads nach einer gewissen Zeit der Inaktivität schlafen legt um Ressourcen für andere Threads freizugeben.

In der ENM.pbi gibt es nun im Header einige gut dokumentierte Konstanten mit denen das Verhalten des ENM beeinflusst werden kann.
ENM_CommandDescription.pbi wurde angepasst und um fehlende Funktionen/Parameter erweitert.

Kritik, Bugs, Anregungen usw. bitte hier posten :)

Download im 1. Post

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Antworten