BNetEx

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite Zurück  1, 2, 3, 4 ... 11, 12, 13  Weiter

Neue Antwort erstellen

 

gamble

BeitragSa, Nov 19, 2005 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich benutze noch deins, da ich seit dem Update keine Module mehr kompilieren kann.

Edit: Ich werd aus BMax nicht schlau, jetzt kann ich das Modul doch kompilieren. Wie auch immer, funktionieren tut der Quellcode immer noch nicht. Funktioniert er bei Dir?

Hummelpups

BeitragSa, Nov 19, 2005 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Lol,

ja, wie vertex etwas weiter oben beschrieb, hatte das
alte Modul bei 2 Befehlen eine Macke.

Die sind nun wohl behoben.

Ob es funzt kann ich im moment nicht sagen, da ich gerade
selber viel programmieren muss damit mein zwischenprojekt
weiter kommt. Sry.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Vertex

BeitragSa, Nov 19, 2005 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Arg, ja, das ist ein Bug von BNetEx...
Die Nachricht ist 1044 Byte groß, der Buffer aber nur 1024 Byte.
Werde mich gleich drum kümmern.
mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSo, Nov 20, 2005 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte, ich könnte den internen Buffer auf 1024 Byte reduzieren mit

Code: [AUSKLAPPEN]
Global Size : Int
Size = 1024
setsockopt_(Socket, SOL_SOCKET, SO_RCVBUF, Varptr(Size), 4)


Aber das hat anscheinend keine Auswirkungen.

Dann habe ich mir mal:
Code: [AUSKLAPPEN]
Global Size : Int
Global Length : Int
Length = 4
getsockopt(Socket, SOL_SOCKET, SO_MAX_MSG_SIZE, Varptr(Size), Varptr(Length))


ausgeben lassen, und stellte fest, dass der interne Empfangsbuffer 65507 Byte groß ist. Ich weiß nicht, ob 64 KByte für jeden UDP-Socket zu erstellen, gerechtfertigt sind. Aber ich pers. gehe davon aus, das man max. 2 UDP Sockets verwendet. Das wären 128 KB verschwendeter Arbeitsspeicher.

Was haltet ihr davon, bzw. vllt hat ja jemand einen Lösungsansatz.

Das ganze betrifft übrigens NICHT TCP Streams!

mfg olli
vertex.dreamfall.at | GitHub

Hummelpups

BeitragSo, Nov 20, 2005 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja,

ich meine mal gehört zu haben das die größte UDP Paket größe
64kB ist. Das ist ne ganze Menge, wenn man überlegt 65.000 Chars
darin zu speichern...?

Würde es nicht die hälfte auch tun?

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Vertex

BeitragSo, Nov 20, 2005 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein UDP Datenpacket ist so aufgebaut:

Code: [AUSKLAPPEN]
0     8     16     24    31
+------------+------------+
| Quell-Port | Ziel-Port  |
+------------+------------+
| Länge      | Prüfsumme  |
+------------+------------+
|          Daten          |
|           ...           |
+-------------------------+


Die Länge gibt die Größe des UDP-Packets inkl. Header an. Der Header nimmt 8 Byte ein. Also ist die Maximallänge des Payloads 2^16 - 8 - 1 = 65527 Byte.

Wie gesagt, ich habe schon versucht den Receivebuffer zu verkleinern, hat aber eben keine Auswirkung Sad Natürlich sind 64 KByte schwachsinn für ein Spiel, jedoch für Videostreams z. B. recht nützlich.

mfg olli
vertex.dreamfall.at | GitHub
 

klepto2

BeitragDo, Nov 24, 2005 10:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Vertex, das problem mit deinen Docs hat sich gelöst. Mit der neuen Version von bbdoc werden auch Types und Methoden angezeigt. Allerdings brauchts dafür eine kleine Änderung, damit bbdoc überhaupt eine Hilfe erstellt.

Code: [AUSKLAPPEN]

REM
bbdoc: BNetEx Module
EndRem
Module Pub.BNetEx


der Name , den die IDE in ihrem Baum anzeigt, muss nun extra mit angegeben werden.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Hummelpups

BeitragMi, Jan 11, 2006 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist dieses Projekt inoffiziell abgeschlossen?

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Hummelpups

BeitragMi, Feb 22, 2006 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab da mal ein Problem mit BNetEx, weiß nicht genau ob es an
meinem zur zeitigem Download liegt das so die Timeouts überschritten werden, aber dieser Quellcode erzeugt bei mir unterschiedliche ausgaben.

Habe es mit HTTP 1.1 und 1.0 ausprobiert.

Ich hoffe das es an meinem Quelltext liegt. Guckt euch den mal an ^^
Code: [AUSKLAPPEN]
Global stream:TTCPStream
stream:TTCPStream=New TTCPStream
stream.init()
   
time=MilliSecs()
While Not KeyHit(1)
   If MilliSecs()>=time+5000 Then
      time=MilliSecs()
      Print get_hits()
   End If
Wend

stream.close

Function get_hits()
   stream.setlocalport(30000)
   stream.setremoteip(TNetwork.GetHostIP("blitzhelp.net"))
   stream.setremoteport(80)
   stream.connect()
   stream.writeline("GET /includes/hits.php HTTP/1.0")
   stream.writeline("Host: blitzhelp.net")
   stream.writeline("")
   stream.sendmsg()
   
   Repeat
   Until stream.recvavail()
   
   stream.recvmsg()
   While Not stream.eof()
      txt:String=stream.readline()
      For steps=0 To Len(txt)-3
         If Mid(txt,steps,3)="<p>" Then
            'stream.close()
            'stream=Null
            Return Int(Mid(txt,steps+3,-1))
         End If
      Next
   Wend
End Function


Ich hoffe ihr verzeiht mir das ich hier mal nicht im strict mode
programmiert hab ^^

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Vertex

BeitragMo, Feb 27, 2006 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstens: SetLocalPort muss nicht mit 30000 gesetzt werden. Benutze SetLocalPort() (hier ist Port=0), dann lässt du BNetEx einen freien Port suchen.

Zweitens: BNetEx ist in jetziger Version auf 1024 Byte Datenpacketgröße beschränkt(fürs seden und empfangen). Ich geh davon aus, dass das Dokument größer ist. Wenn interesse besteht, dann werde ich dies noch beheben, wie es bereits in BNet behoben wurde.

Drittens: Benutze TCPTimeouts, um den Benutzer nicht mit 10 Sekunden Standard-Receivetimeout zu belasten.

Viertens: Bei HTTP 1.0 wird nach jedem senden des angeforderten Dokuments die Verbindung getrennt. Dennoch sollte man den Stream schließen, um zu verhindern, dass der verwendete Port nicht freigegeben wird.

mfg olli
vertex.dreamfall.at | GitHub

Hummelpups

BeitragMo, Feb 27, 2006 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Vertex hat Folgendes geschrieben:
Erstens: SetLocalPort muss nicht mit 30000 gesetzt werden. Benutze SetLocalPort() (hier ist Port=0), dann lässt du BNetEx einen freien Port suchen.


Ja, soviel habe ich aus dem Modul und den Examples auch heraus
gelesen Smile Ist aber glaube ich nicht des Fehlers Ursache

Vertex hat Folgendes geschrieben:
Zweitens: BNetEx ist in jetziger Version auf 1024 Byte Datenpacketgröße beschränkt(fürs seden und empfangen). Ich geh davon aus, dass das Dokument größer ist. Wenn interesse besteht, dann werde ich dies noch beheben, wie es bereits in BNet behoben wurde.


Interesse besteht, das momentane Paket ist ~250 byte groß, dürfte
also keine Buffer Probleme geben.

Vertex hat Folgendes geschrieben:
Drittens: Benutze TCPTimeouts, um den Benutzer nicht mit 10 Sekunden Standard-Receivetimeout zu belasten.


Habe nun mal 0,5 Sekunden Timeouts verwendet

Vertex hat Folgendes geschrieben:
Viertens: Bei HTTP 1.0 wird nach jedem senden des angeforderten Dokuments die Verbindung getrennt. Dennoch sollte man den Stream schließen, um zu verhindern, dass der verwendete Port nicht freigegeben wird.


Okay, ich close nun den Stream nach jedem Transfer und
initialisiere ihn bei jedem request neu. so funktioniert es wunderbar.

Es wäre wirklich schön wenn du die Buffergröße verändern könntest Smile
Hier mal mein aktueller Code, nur so schnell dahingeschludert ohne strict usw.
muss gleich weg, dann lernen, Ümorgen ZwischenPr. ;(

Code: [AUSKLAPPEN]
Global stream:TTCPStream
stream:TTCPStream=New TTCPStream

time=MilliSecs()
While Not KeyHit(1)
   If MilliSecs()>=time+1000 Then
      time=MilliSecs()
      Print get_hits()
   End If
Wend

stream.close

Function get_hits()
   stream.init
   stream.SetTimeouts(500,500,500)
   stream.setremoteip(TNetwork.GetHostIP("blitzhelp.net"))
   stream.setremoteport(80)
   stream.connect

   stream.writeline("GET /includes/hits.php HTTP/1.1")
   stream.writeline("Host: blitzhelp.net")
   stream.writeline("")
   stream.sendmsg()
   
   Repeat
    incoming=stream.recvavail()
   Until incoming
   Print "Got: "+incoming
   
   stream.recvmsg()
   While Not stream.eof()
      txt:String=stream.readline()
      Print txt
   Wend

   stream.close
End Function


Herzlichen Dank vertex, du hast mir sehr geholfen Very Happy

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Vertex

BeitragSa, März 04, 2006 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/bnetex162.zip
Damit kann man nun auch Packete senden, jenseits der 1KByte Marke.

Bei meinem Test habe ich mal eine 3 MByte große Datei heruntergeladen. Hatte glaube ich, ca. 10 Sekunden gedauert. Die Datenpackete waren 4KByte groß. Hat sich also gelohnt.

Dadurch das jedes Auslesen, Beschreiben, Senden und Empfangen eine neu allokierung der jeweiligen Sende- bzw. Empfangspuffer bewirkt, dürfte das jedoch etwas langsamer sein. Standardmäßig 1KByte Buffer einzuführen, die bei größeren Datenpacketen neu allokiert werden, wäre eine gute Idee, jedoch sehr aufwändig für mich zu realisieren.

Es dürfte jetzt keine Fehler mehr geben, beim Versuch einer UDP-Nachricht > 1KByte zu empfangen.

mfg olli
vertex.dreamfall.at | GitHub
 

biegl

Betreff: Problem mit BnetEx

BeitragSo, Mai 07, 2006 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

habe folgendes Problem mit bnetEx:

Ich schreibe gerade ein Programm das 2 Verbindungen gleichzeitig hat.
Einmal eine Verbindung zu einem Irc server (TCPClient) und einen Serverstream der den Port 23 ständig abhören soll (TCPServer).

Das Problem:
Lass ich Irc Verbidung alleine laufen und Kommentiere den Telnet server aus funktionierts.

Lass ich die Irc Verbindung laufen und erstelle den Telnet server, lasse ihn aber nicht in der hauptschleife prüfen ob sich Clients connecten functionierts auch noch.

Sobald ich aber In der AHuptschleife beides überprüfe also ob nachrichtem vom irc und oder von einem telnetclienten vorliegen kackt er ab Sad.

Was kann das sein? Stören sich die beiden Verbindungen? Könnte es gehen wenn ich dem Telnet server sag das er nur überprüfen darf ob eine verbindung eines neuen clients vorliegt, wenn der ircserver gerade ncihts empängt oder sendet?

mfg biegl

Vertex

BeitragMo, Mai 08, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Was heißt hier genau abkacken?
Berkley-Sockets sind nicht solchen Einschränkungen unterzogen.

DSL in der Schule ist zu langsam, als das ich dort mal was in Richtung Debugging-Module programmieren könnte(da ich MSDN o.ä. griffbereit brauche). Damit könnte man einen Logger basteln, der Fehler mit allen Ursachen ausgeben könnte. Alles andere ist aufweniges Rätzelraten. Wenn ich also nicht selber das Problem mal erleben darf, nützt bei mir keine Fehleranalyse.

Weiter weis ich mal darauf hin, das die Beispiele im *.zip Arschiv nicht funktionieren, da sie noch aus alter Zeit stammen.

mfg olli
 

biegl

BeitragMo, Mai 08, 2006 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
OK Vertex vielleicht sagts dir jetzt mehr:

https://www.blitzforum.de/upload/code.php?show=32

Hab hier mal die relevanten Functionen und Codes aus menem Quellcode zusammen gestelllt und gepastet. An was kanns liegen?

mfg biegl

Vertex

BeitragDo, Mai 11, 2006 8:09
Antworten mit Zitat
Benutzer-Profile anzeigen
So weit ist das auch i.O. Das einzige, was ich immer zu bemängeln hätte, wäre ReadLine. Aber das würde sich nur auf das anzeigen von den Zeilen beschränken.
Aus "Hello World\n" könnte nämlich BMax folgende Darstellung dann ausgeben:
Hello
World

Das macht er dann, wenn nur Daten bis Hello ankommen. Dann ist nix weiter vorhanden, und er gibt dir Hello aus. Jetzt kommt das nächste Packet rein mit "World\n". Das wird dann als korrekte Zeile interpretiert. Hier liegt der einzige Nachteil des Bufferns. Man kann sich aber da eine kleine Methode selber schreiben, die ersteinmal prüft, ob \n schon vorhanden ist.

Ansonsten hier die Debugfunktionen:
Code: [AUSKLAPPEN]
Extern "OS"
   ?Win32
      NetError:Int() = "WSAGetLastError@0"
   ?Linux
      Global errno : Int
   ?MacOS
      Global errno : Int ' Keine Ahnung ob das geht!!!!
   ?
End Extern

?Linux
   Function NetError:Int()
      Return errno
   End Function
?MacOS
   Function NetError:Int()
      Return errno
   End Function   
?

(könnte auch nur über Extern "linux" gehen!)

Also, hinter dem Befehl immer mal ausgeben lassen, wo es abkackt. Dann diese Funktion selber analysieren, in dem man Debuglog NetError() immer hinter jede Socketfunktion (bei BNetEx zu erkennen, dass die Funktion klein geschrieben ist und einen _ Suffix benutzt).
Dann muss man die Funktion unter MSDN eingeben, den Errorcode mal in wsock32.h(oder wie die heißt, ist aber bei DevC++ z. B. dabei) suchen und bei MSDN gucken, was die ursache ist.

Wie gesagt, würde sich da ein Debugmodule von mir besser machen, der das automatisch macht.

mfg olli

Wild-Storm

BeitragDo, Jun 22, 2006 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
404
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875

BtbN

BeitragDo, Jun 22, 2006 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm.... Kein 404?
Also bei mir geht der Download problemlos.

Wild-Storm

BeitragDo, Jun 22, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
bin ich blind oO
http://vertex.art-fx.org/bnetex162.zip
der link geht doch wohl eindeutig nicht
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875

BtbN

BeitragDo, Jun 22, 2006 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
wir wärs mit dem: http://vertex.art-fx.org/bnet/bnetex162.zip

Gehe zu Seite Zurück  1, 2, 3, 4 ... 11, 12, 13  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group