Bug beim versenden großer Daten? [PB 4.1]

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Bug beim versenden großer Daten? [PB 4.1]

Beitrag von Joel »

Hallo,

Ich habe ein Bug entdeckt das in der PB.Version 4.10 Beta 2 und unter Windows XP und 98 auftritt.

Wenn ich eine Datei mit SendNetworkFile() Sende und diese mit ReceiveNetworkFile() empfange und diese größer als ~ 40 Mb ist dann wird das senden nach ~ 20 Mb einfach abgebrochen (Der Befehl arbeitet zwar noch aber die Dateigröße verändert sich nichtmehr)
Dieses Bug ist mir bei allen Dateien die Größer sind als ~ 40 Mb aufgefallen (ich habe es bei zb. MPG, AVI, WMV, TXT und doc probiert)

Hier unten ist ein Beispiel Code für PB 4.10 Beta 2:


Server:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf
Port = 6832
If CreateNetworkServer(0, Port)
  Repeat 
    SEvent = NetworkServerEvent()
    If SEvent
      ClientID = EventClient()
      Select SEvent
        
        Case 3
          ReceiveNetworkFile(ClientID, "C:\TEST.mpg") ; Der Video wird hier empfangen, bricht aber immer zwischen 8 und 20 Mb einfach ab zu senden. Der Befehl ReceiveNetworkFile ist aber weiterhin am Arbeiten.
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  
  CloseNetworkServer(0)
EndIf

  
End   

Client:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832

ConnectionID = OpenNetworkConnection("meinedns.dyndns.org", Port)
If ConnectionID
  
  SendNetworkFile(ConnectionID, "K:\Test.mpg") ; Größe (300 MB)
    
  MessageRequester("PureBasic - Client", "A string has been sent to the server, please check it before quit...", 0)
  
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
  
End   
Zuletzt geändert von Joel am 16.05.2008 07:31, insgesamt 3-mal geändert.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Ist schon immer so gewesen in PB, ist vielleicht auch n windows-problem.
Im englischem Forum gibt's n Thread darüber, is glaub ich abhängig vom
Arbeitsspeicher wie groß die Dateien sein können. Bei mir brachs bei 80
MB ab. Solche Dateien solltest eh splitten, falls Verbindungsabbrüche
auftreten, dann brauchste nich noch einmal von vorne anfangen.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ich fände es gut, wenn der Fehler mal behoben wird,

In anderen Programmiersprachen funktioniert das auch, liegt glaube ich dann nicht an Windows.

Vielleicht kann der Fehler ja mal in PB 4.20 gehoben werden, dann ist mein Programm 80% kleiner als sonst. :wink:
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Also ein Windowsporblem kann das nicht sein, sonst würde man ja allgemein keine Dateien über 20 MB ziehen können...
[Edit]
Ich würde "SendNetworkFile()" nicht unbedingt zum versenden von Daten nutzen, in der Zeit können keine andere Daten gesendet bzw. empfangen werden. Für einen Server wäre das schlecht. Bei einer Peer to Peer - Verbindung wäre das vielleicht noch ok.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Hmmmm, weiß einer woran das sonst liegen kann???

Habe auch mal im Englischen Forum geschrieben, scheinbar in denen nochnie aufgefallen das man nur kleine Daten versenden kann :mrgreen:

Es müsste einen neuen Befehl geben der die Daten Teilt und dann erst sendet, oder gerade einen der das Bug nichtmehr hat
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Dafür brauchst Du keinen Befehl, das kannst selbst machen. Ist natürlich mit etwas Aufwand verbunden, aber gehen tut das auf jeden Fall.
Ich hab im moment nur leider nicht den Nerv, dafür ein Beispiel zu machen, aber vielleicht gibts sogar Beispiele dafür. Wobei meines Wissens nach, hier noch nicht sonderlich viel mit Netzwerk-Routinen veröffentlicht wurde, es müßte aber ein paar Leut geben, die sich damit recht gut auskennen.
PureProgger
Beiträge: 40
Registriert: 19.12.2006 18:38

Beitrag von PureProgger »

Hi,

wenn SendNetworkFile nicht funktioniert bei größeren Datenmengen sollte man es vielleicht mal mit SendNetworkData probieren!

gruß Michael
PB 4.30
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Code: Alles auswählen

Procedure MySendNetworkFile(ConID.l, File$, Size.l = 1024)
  Protected Length.l
  Protected File.l = ReadFile(#PB_Any, File$)
  Protected *Buffer = AllocateMemory(Size)

  If File And *Buffer And ConID
    While Not Eof(File)
      Length = ReadData(File, *Buffer, Size)
      SendNetworkData(ConID, *Buffer, Length)
    Wend
  EndIf

  If File : CloseFile(File) : EndIf
  If *Buffer : FreeMemory(*Buffer) : EndIf
EndProcedure
Hier mal eine Quick&Dirty Prozedur. Ungetestet!
Fals etwas unklar, fragen ... :wink:

Von SendNetworkFile() halte ich persönlich nicht viel, da man keine
kontrolle über den wirklichen Datenfluss hat und sie das gesamte
Programm blockiert. Das problem mit den großen Dateien wurde im
Forum glaub auch schon mal erwähnt.

Edit: Ups, danke edel, ganz vergessen :oops: ... hab die Struktur
mal geändert, zum Verständnis sollte es so reichen.

MFG PMV
Zuletzt geändert von PMV am 18.05.2008 22:58, insgesamt 2-mal geändert.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Hier mal eine Quick&Dirty Prozedur. Ungetestet!

Der untere Teil wird nie ausgefuehrt wenn die Datei
gesendet werden konnte.


edit:
Stand da nicht grad was anderes ? naja Wurst, es fehlt trotzdem ein
Freememory.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Ohne mir jetzt die Procedure genauer anzuschauen, ich halte es nicht gut, ungetestete Lösungen zu für irgendwelche Probleme zu posten. Vorallem, wenn es sich bei der Anfrage offensichtlich im jemanden handelt, dem es noch einiges an Erfahrung fehlt.
Antworten