BNet - Netzwerkmodul / Kompatibel mit BlitzBasic
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Neue Version 1.36 ist draußen mit kleiner readme zur Installation, Befehlsreferenz usw. Bug gefunden und behoben, wo man von Klienten mit AcceptTCPStream nicht lesen konnte. http://vertex.art-fx.org/bnet.zip Weiter habe ich bemerkt, das folgendes Beispiel nicht geht: Code: [AUSKLAPPEN] www = OpenTCPStream("vertex.art-fx.org", 80)
If Not www Then Notify "Konnte nicht verbinden!" End EndIf WriteLine www, "GET http://vertex.art-fx.org/3D/wireframe2.png HTTP/1.0" WriteLine www, "" For I = 1 To 10 Print ReadLine(www) Next stream = CreateFile("temp.png") While Not Eof(www) WriteByte stream, ReadByte(www) Wend CloseFile stream CloseTCPStream www Graphics 323, 253, 0, 0 image = LoadImage("temp.png") DrawImage image, 0, 0 Flip WaitKey End Er hört dann auf, wenn s_FD_ISSET gleich 0 ist. Muss mal schauen wie cih das noch fixen kann. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Fehler konnte nun eingegrenzt werden. Habe jetzt ein haufen ioctlsocket, setsockopt Zeug versucht, und es ist immer gescheitert. Dann ist mir aufgefallen, er hält ja garnicht das Read-Timeout von 10 Sekunden ein. Wenn ich nämlich bei BlitzClassic da nur 10 Millisekunden angebe, kann er die Datei auch nicht richtig auslesen. Und hier gibt es halt garkein Timeout beim lesen.
Es liegt also im Großen und Ganzen an: Code: [AUSKLAPPEN] Case NETLIB_TCP_CLIENT
If iSocket = INVALID_SOCKET Then Return 0 s_FD_ZERO(TNetwork.tFDSRead) s_FD_SET(iSocket, TNetwork.tFDSRead) If s_select(0, TNetwork.tFDSRead, Null, Null, tReadTimeout) = SOCKET_ERROR Then Return 0 iResult = s_recv(iSocket, pBuffer, iCount, 0) If iResult = SOCKET_ERROR Then Close() iEOF = -1 Return 0 ElseIf iResult = 0 Then Close() Return 0 Else iEOF = 0 Return iResult EndIf mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Neue Version 1.37 für WIndows draußen!
http://vertex.art-fx.org/bnet.zip Bug ist nun gefixed, es lag nämlich an Eof und nicht an Read. Jetzt können größere Dateien heruntergeladen werden(siehe examples/network/download.bmx) Habe auch mal eine englische Hilfe mit eingefügt. In wie weit mein Englisch korrekt ist, ist die andere Frage ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun sofern ich die download.bmx um folgende zeilen erweitert hab
Local zeit:Int=MilliSecs()-1000 und im downloadloop: Print "Bytes empfangen: "+Size+" "+(Size/((MilliSecs()-zeit)/1000)/1000)+" KB/s" gab das bei mir 118KB/s Saubere Arbeit, Olli. Sind nun für Windows alle Befehle wie im Classic Blitz enthalten und keine Bugs mehr? |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Freut mich zu hören. Hatte als erstes FlushMem vergessen, und mich gewundert warum das immer lahmer wurde. Man könnte das sogar noch optimieren, in dem man Datenpackete in Banks auslagert. Aber 118 KB/s finde ich doch akzeptable. Bei Spielen wird Internet sowiso lahmer sein, als die CPU.
Ich müsste mal noch testen, in wie weit CopyStream standardmäßig mit BlitzClassic kompatibel ist, ansonsten sind alle Befehle vorhanden (bis auf DirectPlay natürlich). Bugfreiheit kann ich natürlich nicht garantieren, jedoch ist das schon eine sehr stabile Version. Werde mir mal noch Zeit nehmen, und jeden Befehl einen Elchtest unterziehen. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Suco-XBetreff: ........ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal meine kleine Modifikation zum Download Sample. Läuft bei mir ~400 MS Schneller als die andere Variante. Ich weiss es jetzt nicht so genau. Müsste StreamSize bei dem Download Beispiel die Dateigröße zurückgeben?
Ich teste die Lib jedenfalls weiter aus. Wie immer gute Arbeit Vertex. Code: [AUSKLAPPEN] Print StreamSize(TCP) File = WriteFile(OutFile) Local time = MilliSecs() While Not Eof(TCP) CopyBytes(TCP,File,1024) Size:+1024 Print Size+" Bytes loaded" Wend Print "Zeit: "+(millisecs()-time) CloseFile(OutFile) Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs jetzt auch mal ausprobiert und muss sagen echt super Arbeit! ![]() Hatte nen TCP Server geschrieben welcher auch zu funktionieren scheint. Beim zugehörigen Client hab ich allerdings ein kleines Problem: Code: [AUSKLAPPEN] If Not Eof(tcp) Local cmd:Byte = 0 Try cmd = ReadByte(tcp) Catch ex:Object Notify "Fehler" End Try Select cmd Case 1 Print "Bla" Case 255 ex = True Notify "Kicked by server" Default End Select EndIf Da wo ich das Try Catch hab kommts dauernd zu ner Exception, was mach ich da falsch? ![]() Eigentlich versucht es ja nur auszulesen wenn was im Stream ist (not eof). Aber der landet dauernd da obwohl der Server nur ganz am Anfang was schickt (1), worauf der Client auch richtig das "Bla" ausgibt. Nach dem "Bla" kommen dann ununterbrochen Exceptions. Sieht fast so aus als ob mit dem Eof() was nicht stimmen würde? Oder hab ich evtl. ne alte Version? Aber ich hab auf den oberen Link geklickt wo 1.37 steht. |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Habe das mal mit Eof unter BlitzClassic ausprobiert, und da geht es gütiger Weise auch nicht. ReadAvail sollte man bei der Abfrage benutzen. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah ok, damit funktionierts, danke ![]() Ich hab gesehen du hast aber Eof auch implementiert, sollte das nicht auch funktionieren? Denn in den mitgelieferten Beispielen wird ja auch überall Eof verwendet. Aber schön wenns mit ReadAvail funktioniert, reicht mir eigentlich auch schon ![]() Von daher nochmal, echt klasse Arbeit! |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke mal für den Hinweis, habe noch 2 simple Fehler in Eof gefunden...
http://vertex.art-fx.org/bnet.zip ist die neue 1.38 Version mit verbesserten Eof. Ja, ReadAvail gibt im eigentlichen die Puffergröße zurück, die man auslesen kann. Eof prüft zusätzlich mit select ob nicht irgendwie ein Fehler aufgetreten ist, basiert letztendlich auch auf ReadAvail. Ich würde mal sagen, das es jetzt event. auch mit Eof gehen kann. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, werds gleich mal testen.
Edit: Funktioniert. Feine Sache ![]() |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
QuietBloke von bb.com hatte noch ein fehler beim Testen mit Telnet gefunden:
Code: [AUSKLAPPEN] Graphics 640,480,0
main () End Function main() Local svrGame Local strStream svrGame = CreateTCPServer(6000) While Not KeyHit(1) strStream = AcceptTCPStream(svrGame) If strStream Then WriteString(strStream,"Im busy. Come back later" ) CloseTCPStream(strStream) End If Delay 500 Wend End Function "Im busy. Come back later" wurde zwar zu Telnet übetragen, aber die Verbindung blieb so lange offen, bis der Server selbst geschlossen wurde. Bug wurde gefixed: http://vertex.art-fx.org/bnet.zip <- 1.89 Wers testen will: Start -> Ausführen -> "cmd" -> "Telnet 127.0.0.1 6000" mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Ein Modul gehört ins Modul Forum. Ich habe es gestern vergessen. D2006 |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, es gab noch einen Bug mit CountHostIPs. Danke hier an Wave vom bb.com Forum der mich darauf aufmerksam gemacht hat!
http://vertex.art-fx.org/bnet.zip <- Die neue Version mit gefixten Bug! mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
So neuer Bug gefunden in Eof und gefixed!
Es ist nun so, wenn man ein Server erstellt, und ein Klient die Verbindung abbricht, das dann Eof -1 zurück liefert. Das war vorher nicht so. Bei BlitzBasic hat man leider nicht die Mögichkeit die Verbindung zu checken ist aber anscheinend auch ein Bug. Zur Erleuterung (ausgehend bei Klienten mit AcceptTCPClient): Eof = 0 -> Es können Daten ausgelesen werden Eof = 1 -> Es können keine Daten ausgelen werden Eof = -1 -> Verbidung abgebrochen http://vertex.art-fx.org/bnet.zip <- Version 1.41 Danke hier an IonPainter, der mich darauf aufmerksam gemacht hat! Hier zum testen: Code: [AUSKLAPPEN] Strict
Type THTTPClient Global List : TList Field Stream : TTCPClient End Type Global Server : TTCPServer Global Client : TTCPClient Global HTTPClient : THTTPClient THTTPClient.List = CreateList() Server = CreateTCPServer(80) If Server = Null Then RuntimeError "Konnte Server nicht erstellen!" TCPTimeouts(0, 1000) Repeat Client = AcceptTCPStream(Server) If Client <> Null Then HTTPClient = New THTTPClient HTTPClient.Stream = Client THTTPClient.List.AddLast(HTTPClient) Print "New client!: "+DottedIP(TCPStreamIP(Client)) EndIf For HTTPClient = EachIn THTTPClient.List If Eof(HTTPClient.Stream) = -1 Then Print "Client disconnected!: "+DottedIP(TCPStreamIP(HTTPClient.Stream)) THTTPClient.List.Remove(HTTPClient) Continue EndIf While Not HTTPClient.Stream.Eof() Print DottedIP(TCPStreamIP(HTTPClient.Stream))+" "+.. ReadLine(HTTPClient.Stream) Wend Next Print "..." Forever Wenn man jetzt im Firefox localhost bzw. 127.0.0.1 eingibt, und dann auf Stop klickt(im Firefox noch), dann steht im output von bmax "Client disconnected!: 127.0.0.1" mfg olli |
||
vertex.dreamfall.at | GitHub |
- Zuletzt bearbeitet von Vertex am Sa, Mai 28, 2005 1:31, insgesamt einmal bearbeitet
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Super gemacht. Aber das Programm arbeitet unter Windows anders als unter Linux. Hast du den Quellcode von der Linux-Modul auch angepasst? Da unter Linux V1.38 und Windows 1.41 steht. | ||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Linux-Code hat noch die alten Fehler drin. Das Linuxmodul ist eigentlich nur nativ vorhanden, da sich Winsock und Berkley Sockets sehr ähneln. Problem liegt einfach darin, dass ich BMax nicht unter Knoppix zum laufen bringe, ich somit BNet nicht damit testen kann. Die ganzen Tutorials im Internet beziehen sich zudem auch nur auf Winsock.
Wenn mir jemand sagt, welche Knoppixversion ich mir ziehen muss, damit BMax läuft, nur her damit. Intel 82915G/GV/910GL Express Chipset Family ist die Onboard-Grafikkarte. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://vertex.art-fx.org/bnet.zip <- neue Betaversion für Linux und MacOS!
Dank BigMichi der mich über ein Remotecontrol die letzten Tage unter Linux programmieren lassen hat, habe ich jetzt eine Betaversion heraus gegeben. Ob das unter MacOS laufen wird, kann ich halt nur vermuten. Habe den kompletten Quellcode von der Linuxversion genommen und die FIONREAD Konstante abgeändert. Ansonsten ist es jetzt notwendig mit Framework Pub.BNet zu arbeiten! Das liegt daran, das es nun das Socketmodul von Mark standardmäßig gibt, das z. B. auch DottedIP als Funktion anbietet. Um nicht in Konflikt zu kommen, bitte immer Framework benutzen. So, jetzt seit ihr gefragt. Funktionieren die Beispiele? mfg olli |
||
vertex.dreamfall.at | GitHub |
Inkubus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe Probiert mit BNet mal auf Irc zu connecten.
Aber nach kurzer idle zeit trennt er die verbindung. So ca 5 sekunden. Vielleicht kennt ja einer ne Lösung Hier der Code: Code: [AUSKLAPPEN] Strict
Framework Pub.BNet Import Brl.retro Import Brl.StandardIO Import Brl.FileSystem 'Import Brl.Max2D Const GX:Int = 800 Const GY:Int = 600 'Graphics GX, GY, 0 Const Port:Int = 6667 Const Server:String = "irc.quakenet.org" Global Name:String = Input("Wie ist dein Nickename? ") Global Channel:String = Input ("Welechen Channel soll ich Joinen? (Ohne #) ") Global Email:String Global TCP:Int, RecvLine:String TCP = OpenTCPStream(Server, Port) If TCP = 0 Then RuntimeError "Konnte keine Verbindung aufbauen" EndIf While Not Eof(TCP) RecvLine = ReadLine(TCP) Print RecvLine If Left(RecvLine, 4) = "PING" Then Senden "PONG" + Replace(RecvLine, "PING", "") End If If Instr(RecvLine, "376") Then Senden "JOIN #"+Channel End If If Instr(RecvLine, "Checking Ident") Then ' Sende Benutzer Daten Senden "USER "+ Lower(Name) +" tolmoon tolsun :Gehhilfe BBMax Bot" Senden "NICK "+ Name EndIf Wend CloseTCPStream TCP FlushMem End Function Senden (str:String) WriteLine TCP, str Print "["+ Name +"]"+str End Function |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also erstens musst du dich gleich zu Beginn mit USER und NICK anmelden, unabhängig davon ob in der Zeile ein Checking Ident steht (denn das kommt normalerweise erst wenn man schon angemeldet ist).
Und der Grund warum du wahrscheinlich sofort wieder raus fliegst: Die Schleife ist nicht so gut. Du kannst nicht erwarten dass vom Server ununterbrochen Daten ankommen. Das heisst du musst eine normale Schleife machen die mit Esc oder sonst wie beendet wird. Da prüfst du dann ob Daten da sind, und wenn ja wertest du sie aus. Wenn keine da sind arbeitet die Schleife dann auch weiter und beendet nicht gleich das Programm. Und am Ende des Programmes müsstest du dem Server noch QUIT <message> senden, damit der Server auch weiss dass du weg bist. Ansonsten meldet der Server den anderen Usern immer ein Ping Timeout. Edit: Ich empfehle dir das hier ![]() |
||
Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group