Netzwerkfrage ?

Anfängerfragen zum Programmieren mit PureBasic.
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Netzwerkfrage ?

Beitrag von amiga123 »

Hallo
Habe da folgendes Problem. Wenn ich diesen Beispielcode übersetzen lassen läuft das Programm eine gewisse Zeit und bricht dann ab. Wenn ich mir den Task Manager ansehe, dann braucht das Programm immer mehr Speicher sind alle Sekunden 0.004 KB. Was kann man da machen das das Programm nicht immer mehr Speicher braucht ?

Code: Alles auswählen

x.l
InitNetwork()
Port    = 6832
*Buffer = AllocateMemory(1000)
SEvent.l
ClientID.l

If CreateNetworkServer(0, Port)

  Repeat
    Gosub TIMER
    Delay (100)
  Until quit = 1
EndIf
End
TIMER:
Time$ = FormatDate("%ss", Date())
Debug Time$
x + 1
SEvent = NetworkServerEvent()
If SEvent
  ClientID = EventClient()
  vx$      = "§"
  net$     = anlage$ + vx$
  net$     = net$ + "1" + vx$
  net$     = net$ + "2" + vx$
  net$     = net$ + "3" + vx$
  net$     = net$ + "4" + vx$
  net$     = net$ + "5" + vx$
  SendNetworkString(ClientID, net$)
EndIf
Return
Ist ein Teil meines Programmes das daten ins Netzwerk schickt. Habe es schon mit der OnERROR Abfrage probiert, und da wird immer der SendNetworkString(ClientID, net$) als Ursache angezeigt.

Gruß Amiga123

Fehlermeldung die Zeile 1903 ist ebenfalls dieser Befehl SendNetworkString(ClientID, net$)
A program error was detected: Error Message: Invalid memory access Error Code: -1073741819 Code Address: 4266579 Target Address: 16166968 Sourcecode line: 1903 Sourcecode file: X:\Purebasic_4_00_Quellcode_ok\VISTA\Server\Server_1_02_OK.pb Register content: EAX = 94 EBX = 2011927161 ECX = 8081224 EDX = 0 EBP = 1245068 ESI = 16166968 EDI = 0 ESP = 1245048
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Marc-21
Beiträge: 39
Registriert: 11.02.2008 19:37

Re: Netzwerkfrage ?

Beitrag von Marc-21 »

WEnn ich das noch richtig weiß ist der fehler ClientID weil es nirgends gesagt wird wohin er es senden soll.


zb
ConnectionID(ClientID bei dir) = OpenNetworkConnection("127.0.0.1", Port)
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Netzwerkfrage ?

Beitrag von amiga123 »

Marc-21 hat geschrieben:WEnn ich das noch richtig weiß ist der fehler ClientID weil es nirgends gesagt wird wohin er es senden soll.


zb
ConnectionID(ClientID bei dir) = OpenNetworkConnection("127.0.0.1", Port)
ne also an dem kann es nicht liegen. Es funktioniert ja auch meist 1 bis 2 Stunden. Die Clienten kriegen in dieser Zeit ihre Daten ganz normal.

Gruß Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Netzwerkfrage ?

Beitrag von PMV »

Daten die der Server empfängt müssen auch im Programm ausgelesen
werden. Ich sehe lediglich das senden der Daten. So wird der Puffer
einfach voll laufen.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Netzwerkfrage ?

Beitrag von amiga123 »

PMV hat geschrieben:Daten die der Server empfängt müssen auch im Programm ausgelesen
werden. Ich sehe lediglich das senden der Daten. So wird der Puffer
einfach voll laufen.

MFG PMV
Natürlich hängt auf der Clientseite ein Programm drann das die Daten ausliest. Wie gesagt das läuft unterschiedlich mal 1 bis 2 Stunden ohne Probleme.Die Clienten bekommen die Daten und geben die dann aus.
Was natürlich sein könnte das der server mehr daten sendet als die Clienten abnehmen ?, das werde ich mir noch mal anschauen.

Gruß amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Netzwerkfrage ?

Beitrag von PMV »

Der Server empfängt doch auch Daten.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Netzwerkfrage ?

Beitrag von amiga123 »

Hallo

Für alle die es Interessiert habe die Lösung gefunden.

client = EventClient()
*Buffer = AllocateMemory(1000)
Repeat
lese = ReceiveNetworkData(client, *Buffer, 1000)
Until lese <= 0
FreeMemory(*Buffer)
Wird dieser kleine Programmteil eingefügt läuft das Programm ohne Probleme und hängt sich auch nicht mehr auf.

Code: Alles auswählen

x.l
InitNetwork()
Port    = 6832
*Buffer = AllocateMemory(1000)
SEvent.l
ClientID.l

If CreateNetworkServer(0, Port)

  Repeat
    Gosub TIMER
    Delay (100)
  Until quit = 1
EndIf
End
TIMER:
Time$ = FormatDate("%ss", Date())
Debug Time$
x + 1
SEvent = NetworkServerEvent()
If SEvent
    client = EventClient()
   *Buffer = AllocateMemory(1000)
    Repeat
      lese = ReceiveNetworkData(client, *Buffer, 1000)
    Until lese <= 0
    FreeMemory(*Buffer)

  ClientID = EventClient()
  vx$      = "§"
  net$     = anlage$ + vx$
  net$     = net$ + "1" + vx$
  net$     = net$ + "2" + vx$
  net$     = net$ + "3" + vx$
  net$     = net$ + "4" + vx$
  net$     = net$ + "5" + vx$
  SendNetworkString(ClientID, net$)
EndIf
Return
Das war es schon.

Gruß Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Antworten