Seite 4 von 15

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 07.02.2011 19:29
von Andreas21
Die Zeit die vergeht bis zum absturtz ist die selbe wie #ENM_SN_UDPWorkAroundInactiveKill.
Ich selber brauch ja nur TCP da ist das Problem ja nicht. :)

Das ändern hat nix gebracht.

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 07.02.2011 19:41
von cxAlex
Andreas21 hat geschrieben:Die Zeit die vergeht bis zum absturtz ist die selbe wie #ENM_SN_UDPWorkAroundInactiveKill.
Ich selber brauch ja nur TCP da ist das Problem ja nicht. :)

Das ändern hat nix gebracht.
Vertausch mal bitte die beiden DeleteMap() befehle im UDPWatcher().

Ich benutze UDP eigendlich auch nie, aber der Vollständigkeit halber sollte es ja trozdem gehen. Danke fürs testen :)

Gruß, Alex

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 07.02.2011 19:51
von Andreas21
Das bringts leider auch nicht.

Soll ich etwas debugen und dann posten?
Und wenn ja was.

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 07.02.2011 20:22
von cxAlex
Andreas21 hat geschrieben:Das bringts leider auch nicht.

Soll ich etwas debugen und dann posten?
Und wenn ja was.
Ich bin grade mit meinem Latein am Ende oder etwas betriebsblind. Ich beschäftige mich jetzt mal ein bisschen mit GAL Programmierung und seh mir das später, bzw. Morgen Vormittag an.

Gruß, Alex

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 08.02.2011 11:37
von cxAlex
Update.

Der Fehler mit UDP sollte jetzt behoben sein. Hing mit diesem seltsamen Verhalten von PB-Maps zusammen.

Download im 1. Post.

Gruß, Alex

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 08.02.2011 12:22
von Andreas21
So wies auschaut lags an meiner PB Installation das, das Problem aufgetaucht ist.
Hatte mein PC neu aufgesetzt und es ging.

Ich hab nun nur folgendes Problem.
Bild

Problem beim Server.
Ich habe den Client gestartet und 10 sec ca. gewartet.
Danach den Client beendet und ihn erneut gestartet.
Danach hab ich diesen Fehler bekommen.
Der Fehler ist auch beim alten Code.

Ich werds aber lieber nochmal anders testen, nicht das an meinem rechner liegt ;)

Code: Alles auswählen

PureBasic 4.51 (Linux - x86)
******************************************

Loading external modules...
Starting compilation...
Including source: ENM.pbi
Including source: ENM_CommandDescription.pbi
Including source: SafeNetwork.pbi
Including source: JobQueue_MultiThread_LE.pbi
Including source: Common/Stack.pbi
Including source: ENM_Pakets.pbi
Including source: Common/zLib.pbi
2806 lines processed.
Creating the executable.

- Feel the ..PuRe.. Power -

root@vs160087:~/EasyNetworkManager/sample# ./server
Press Any Key to exit...Server_Rec: 134637092 blub
Server_Rec: 134654372 blub
Server_Rec: 134653780 blub
Server_Rec: 134654860 blub
Speicherzugriffsfehler
root@vs160087:~/EasyNetworkManager/sample# 
Das giebt mir Linux. Debian 5

Code: Alles auswählen

Server_Rec: X Danke Server :)
Wird garnicht ausgegeben?

Code: Alles auswählen

root@vs160087:~/EasyNetworkManager/sample# pbcompiler -t -e server server.pb

******************************************
PureBasic 4.51 (Linux - x86)
******************************************

Loading external modules...
Starting compilation...
Including source: ENM.pbi
Including source: ENM_CommandDescription.pbi
Including source: SafeNetwork.pbi
Including source: JobQueue_MultiThread_LE.pbi
Including source: Common/Stack.pbi
Including source: ENM_Pakets.pbi
Including source: Common/zLib.pbi
2806 lines processed.
Creating the executable.

- Feel the ..PuRe.. Power -

root@vs160087:~/EasyNetworkManager/sample# ./server
Press Any Key to exit...Server_Rec: 134617372 blub
Server_Rec: 134655100 Danke Server :)
Server_Rec: 134655100 blub
Server_Rec: 134672124 blub
Server_Rec: 134654636 Danke Server :)
Server_Rec: 134654636 blub
Server_Rec: 134617316 blub
Server_Rec: 134664756 Danke Server :)
Server_Rec: 134664756 blub
Server_Rec: 134617316 blub
Server_Rec: 134664988 Danke Server :)
Server_Rec: 134664988 blub

root@vs160087:~/EasyNetworkManager/sample# 
Mit TCP leufts Problemlos.

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 08.02.2011 18:35
von cxAlex
Den Absturz kann ich jetzt beim besten Willen nicht reproduzieren. Die stelle an der er abstürzt deutet auf darauf hin das er eine Job-Queue beenden will die es nicht mehr gibt, aber das sollte eigenlich behoben sein seitdem ich das mit dem komischen Verhalten von Maps herrausgefunden habe. Ich schau nochmal drüber aber gerade habe ich keine Ahnung an was das liegen könnte... Sonst irgendjemand Abstürze, usw?

Bei UDP können Pakete verschwinden oder in falscher Reihenfolge ankommen, das hat das Protokoll leider so an sich.

Code: Alles auswählen

Speicherzugriffsfehler
Aus deinem Log, gibts da irgendetwas näheres dazu, kannst du irgendwie lokalisieren woher der kommt?

Gruß, Alex

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 09.02.2011 10:02
von cxAlex
So ... Habs geupdated. Bin nochmal über die komplette Map-Verwaltung drübergegangen.

Ist der Fehler noch da?


Download im 1. Post
Gruß, Alex

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 09.02.2011 13:03
von Andreas21
Hi,

jetzt stürtzt der Server nicht mehr ab.

Re: Easy Network Manager [V# 1.0.1][Include]

Verfasst: 09.02.2011 13:56
von Kukulkan
Hi Alex,

dein Code hat mir wirklich geholfen. Vor allem, da mein Server Aufträge per TCP/IP entgegennimmt, berechnet und die Ergebnisse dann zurücksenden soll. Das mache ich natürlich mit Threads. Um das sicher zu machen, verwende ich die SafeNetwork.pbi aus deinem Projekt (neueste Version von heute Morgen).

Leider schmiert mein Programm immer so nach ca. 1500 bis 2000 Connections und Threads ab und ich weiss nicht warum. Die IDE bleibt im Debugger stehen, Ungültiger Speicherzugriff. (Schreibfehler an der Adresse 0)

Die IDE markiert die gekennzeichnete Zeile in deinem SafeNetwork.pbi:

Code: Alles auswählen

Procedure __NetworkServerEvent()
  Protected Event, Mutex
  Shared __NetworkProtector
  
  With __NetworkProtector
    LockMutex(\ECMutex)
    Event = NetworkServerEvent() ; <=========== Error happens here
    UnlockMutex(\ECMutex)
    
    If Event
(...)
Die Frage ist, ob ich da grundsätzlich was falsch mache.

- Im Haupt-Programm öffne ich mit CreateNetworkServer() die Server-Funktionen.
- Dann fahre ich einen Loop, in dem ich nur das event #PB_NetworkEvent_Connect abfrage.
- Sobald ich das habe, starte ich einen neuen Thread und übergebe die mit EventClient() ermittelte Client-ID and den Thread.

- Im Thread fahre ich dann einen kleinen Loop und frage die Daten mittels ReceiveNetworkData() ab, bis ich mein Endzeichen finde.
- Habe ich das, berechne ich das Ergebnis (1 bis 1500 Millisekunden).
- Dann sende ich das Ergebnis mit SendNetworkString() zurück und beende mit CloseNetworkConnection().
- Dann ist der Thread zu Ende.

Die Frage ist, ob es so ok ist? Geht das oder muss ich was auslagern? Ist die Verarbeitung falsch? Ich bin der Meinung, dass ich alle Verbindungen sauber wieder beende. Die mit EventClient() ermittelte ID zählt von 1 an aufwärts. Meist bei ca. 1500 bis 2000 schmiert die Karre dann ab :-(

[EDIT] Ach ja, ich verwende #SafeNetwork_UseVId = #True und #SafeNetwork_UDPWorkAround = #False[/EDIT]

Grüße,

Kukulkan