BNet - Netzwerkmodul / Kompatibel mit BlitzBasic
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Inkubus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab es gefix mit
While Eof(TCP) <> -1 Danke für die url hatte ich aber schon gefunden. |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
So.. ich erlaub mir mal den Thread hochzukramen, hab nämlich ein Problem. Ich poste das hier rein, weil ich den Verdacht hab das es ein Bug in BNet ist.
Tötet mich sollte es an meinem Code und nicht an BNet liegen ![]() Ich hab mal angefangen einen simplen Webserver zu programmieren, nur hab ich ein Problem sobald ich viele Daten zu übertragen hab. Code: [AUSKLAPPEN] Method TransferFile:Int(File:String)
Local fStream : TStream Local cByte : Byte WriteLine Stream, "HTTP/1.0 200 Ok" WriteLine Stream, "Server: Webserver" WriteLine Stream, "Content-Type: Text/html" WriteLine Stream, "Content-Length: " + FileSize(File) WriteLine Stream, "Last-Modified: Tue, "+CurrentDate()+" "+CurrentTime()+" GMT" WriteLine Stream,"" fStream = ReadFile(File) While Not Eof(fStream) cByte = ReadByte(fStream) If cByte > 31 WriteByte Stream, cByte EndIf FlushMem() Wend WriteByte Stream, 10 CloseFile fStream End Method So.. mit dieser Methode wird eine Datei an einen Clienten verschickt. Wenn ich jetzt aber eine längere HTML Datei habe wird der Anfang der Datei noch normal verschickt, jedoch verlangsamt sich der Vorgang immer mehr und kommt schließlich ganz zum Stillstand, der Browser zeigt an das die Daten fertig geladen sind. Nach einer Weile stürzt der Server aber mit folgender Meldung ab: Code: [AUSKLAPPEN] Unhandled Exception: Error writing to stream Ich hoffe ihr könnt mir helfen und bedanke mich schonmal im Voraus. hamZta |
||
Blog. |
![]() |
Ninja |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probiers mal mit BnetEx, dem nachfolger von Bnet ![]() |
||
Spiele & Security Tools
www.SelfSoft.org |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz ehrlich: Ja, benutze bitte BNetEx. An BNet werde ich sicher nix mehr pfeilen, weil es zu kompliziert aufgebaut ist.
WriteByte Stream, cByte <- das würde ich so nicht machen. Bei jedem Byte das du versendest wird TCP Header(24 Byte), IP header(20 Byte), Ethernet Header und weitere Header für z. B. Routing mit versendet. Der Overhead ist hier enorm! Also bitte Banks benutzen, wo du gleich mal 1 KB oder so ein liest und auch sendest. mfg olli |
||
vertex.dreamfall.at | GitHub |
gamble |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat das Modul noch jemand kompiliert herumliegen und würde es mir uploaden? Kann zur Zeit keine eigenen Module erstellen ... | ||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Edit: Sorry, falscher Thread ![]() Ist BNet unbedingt nötig? Schau dir mal BNetEx an, das habe ich sogar mit deutscher Hilfe versehen. An BNet arbeite ich eigentlich nicht weiter, und wie ich sehe, meckert der Compiler sowiso bei BMax 1.12. Wenn es UNBEDINGT notwendig ist, update ich mal BNet, aber wie gesagt, ist ein alter Hut, BNetEx ist angesagt. mfg olli |
||
vertex.dreamfall.at | GitHub |
gamble |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, unbedingt nötig ist es nicht ![]() |
||
![]() |
shure_kyuNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
ey vertex..
ich hab fast angefangen zu heulen wo ich gemerkt habe das bnet nicht mehr kompatibel zu bmax 1.12 ist. also gab ich nicht auf zum glück hatten wir letztens einen englisch sprechenden user in #future-coding der sich dem problem annahm es ist sehr simpel gewesen.... der compiler spuckte immer fehler meldungen raus wie [info] Compiling:bnet.bmx Compile Error: Internal error [C:/Programme/BlitzMax/mod/pub.mod/bnet.mod/bnet.bmx;90;4] Build Error: failed to compile C:/Programme/BlitzMax/mod/pub.mod/bnet.mod/bnet.b mx [/info] oder [info] Compiling:bnet.bmx Compile Error: Internal error [C:/Programme/BlitzMax/mod/pub.mod/bnet.mod/bnet.bmx;1053;3] Build Error: failed to compile C:/Programme/BlitzMax/mod/pub.mod/bnet.mod/bnet.b mx [/info] ............... der user sarge hies er guckte sich den code an und fand raus das du einfach anstatt VAR in den jeweiligen zeilen, INT hättest nehmen müssen. nun funktioniert wieder alles hier die neue version mit den änderungen BNET.zip (C)vertex natürlich hab ich gleich alle versionen gefixt also auch die linux und mac version cya |
||
_______//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\________ ◄Blitz 3D/MAX • PC - 2x 3.16Ghz, 4GB-Ram, ATi HD 4890 1024MB• win7 • site$ Rush2Play ° My-Htc.de► ¯¯¯¯¯¯¯\__________________________________________________________________________//¯¯¯¯¯¯¯¯ BBP-RSS FEED Halt dich auf dem laufenden! (C)Shure_kyu |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Huhu,
also ich verwende jetzt auch noch BNet, nicht BNetEx ... *lalala* ... *unschuldigguck* Ich bin im Bereich Netzwerkcode noch nicht sehr erfahren (erlich gesagt, sind es gerade meine ersten Gehversuche). Nun habe ich ein grosses kleines Problem: gibt es eine Möglichkeit zu prüfen, ob ein TCP-Stream noch zum Senden bereit ist? - wenn ich einen Benutzer in meinem Programm "verliere", dann bricht dort das gesamte Netzwerk in sich zusammen, weil das Aufrufen von "WriteLine" an einen TCPStream, mit dem niemand mehr verbunden ist, zu einem RuntimeError führt. ![]() |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nicht, was ihr mit den alten BNet Module habt, aber ich habe es mal 1.41 kompatibel gemacht.
http://vertex.art-fx.org/bnet150.zip Da sind zur Zeit leider nur UDP FUnktionen + Standard Zeug wie CountHostIPs() mit drin. DottedIP() wird zu StringIP() und zusätzlich habe ich die Funktion IntIP() eingeführt, mit der man z. B. "127.0.0.1" in 2130706433 umwandeln kann, damit man sie bei SendUDPStream z. B. angeben kann. Ava, ich kümmere mich nochmal um das TCP Zeug. Aber garantiert werde ich das alte BNet 1.41 Module nicht debuggen ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi Vertex! ![]() Ich konnte mein Problem mittlerweile lösen und es läuft nun alles ausgezeichnet soweit. Warum das alte BNet Modul ? - es war das erste, was mir in die Hände fiel und ich habe ein eigenes Modul komplett darauf aufgebaut, um mir die Netzwerk-Verwaltung noch einfacher zu gestalten. Nun einfach so umzusteigen, davor gruselt es mir zur Zeit noch etwas... ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für die umwandlung einer "127.0.0.1"-IP in eine Integer-IP braucht man garnicht extra eine Funktion machen.
Da kann man einfach HostIp("127.0.0.1") machen, liefert auch die Int-IP zurück. Der Vorteil: Macht auch aus "google.de" eine Int-IP. Das wollte ich nur mal anmerken. |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ava: Jaja, Bequemlichkeit immer allen voran ![]() BORNtobeNAMELESS: IntIP ist aber schneller. Beim Berkley Sockets gibt es nicht umsonst gethostbyname und ntoa. mfg olli |
||
vertex.dreamfall.at | GitHub |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich habe nun schon wieder ein Problem ... und leider weis ich nicht, wie ich dieses lösen soll. Ich kenne mich, wie bereits erwähn,t nicht sonderlich gut aus mit Netzwerke und -verbindungen.
Also ich versuche es mal kurz zu beschreiben. Ich habe mir ein Modul auf dem BNet Modul aufgebaut, dass mir die Verwaltungsarbeit für mein kleines Netzwerk abnimmt. Also quasi eine Liste mit allen verbundenen Nutzern verwaltet und die Client / Server Kommunikation managed, so dass ich mir eigentlich kaum noch Gedanken dazu machen brauche. Lokal lief dieses Netzwerk bisher auch absolut stabil und fehlerfrei. Ich habe es dann in ein bestehendes Projekt eingebunden und wollte es gern über Netz ausprobieren. Nun habe ich jedoch oft Porbleme, dass die Rechner sich gegenseitig nicht finden können. Beim einen Mal konnte ich nur auf einen geöffneten Server connecten, im Umkehrfall hat es aber nicht funktioniert (ich habe einen Server erstellt, der PC auf der anderen Seite konnte keine Verbindung finden/aufbauen). Der zweite Test verlief dann noch depremierender ... diesmal hat es auf beiden Seiten nicht klappen wollen. ![]() Ich habe nun keine Vorstellung, woran dies wohl liegen mag und wie ich dem Abhilfe verschaffen könnte?? - ein Router war beide Male nicht mit im Spiel. ![]() Vielleicht hat da jemand eine Idee und/oder einen guten Rat für mich... + Ava + |
||
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Ava,
läuft auf den Rechnern evtl. eine Software-Firewall, die die entsprechenden Ports blockiert? Außerdem könnte es sein, dass vielleicht die verwendeten Ports bereits belegt sind (kannst Du mit netstat -a überprüfen). Sollten diese Überprüfungen alle nicht weiterhelfen und auch sonst keine brauchbaren Fehlermeldungen erscheinen, besteht noch die Möglichkeit den Netz-Traffic mitzuprotokollieren. Ein sehr brauchbares und umfangreiches Tool hierfür ist Ethereal. Deutlich einfacher dagegen ist das Tool tcpmon, welches sich im Java Axis-Paket befindet und mittels Code: [AUSKLAPPEN] java.exe -cp lib/axis.jar org.apache.axis.utils.tcpmon %1 %2 %3 aufgerufen werden kann. Die Aufrufparameter hierfür sind
Code: [AUSKLAPPEN] %1 - listen port
%2 - target host %3 - target port Aber ich drück' die Daumen, dass es auch ohne Nettracing gelöst werden kann (wobei auch das Spaß machen kann ![]() Solltest Du bezüglich der beiden Tools noch Fragen haben, sag einfach Bescheid. Gruß Preachie |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi Preachie,
danke für Deine Hilfe. Also eine Firewall war jedes Mal vorhanden, für mein Programm aber freigeschaltet. Kann das trotzdem zu Problemen führen? Eine brauchbare Fehlermeldung bekomme ich ja leider nicht. Eigentlich bekomme ich ja gar keine ... OpenTCPStream liefert mir lediglich NULL zurück. Das ist alles, was ich dazu weis. ![]() Diese Testverfahren, die Du mir vorschlägst, sind ja alle ganz schön und gut ... aber gibt es denn keine Möglichkeit, eine sichere Verbindung aufzubauen? (und mit sicher meine ich, dass man sich drauf verlassen kann, dass die Verbindung zumindest in wenigstens 9 von 10 Versuchen auch problemlos zustande kommt). Du hast das mit den Ports angesprochen ... kann man die auch direkt aus Blitz heraus checken, ob sie noch frei sind? Lieben Gruss, + Ava + |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ava: Hmm, kannst du mal Step by Step durchgehen? Damit ich zumindest weiß, ob es bei s_socket, s_gethostbyname o.Ä. herumqäungelt. Dann kommt Analyse mit WSAGetLastError.
mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Ava,
da ich jetzt nicht genau weiß welche Firewall-Software Du einsetzt, kann ich nicht sagen, ob von dieser grundsätzlich ein Fehlerpotential ausgeht. Lediglich zu Testzwecken könntest Du ja mal sämtliche Firewalls deaktivieren (bei Win XP SP2 auch an die interne Windows Firewall denken ![]() Aus Blitz heraus direkt prüfen ob ein Port frei ist oder nicht, ist nach meiner Meinung nicht möglich, es sei denn, unter der Verwendung einer externen UserLib (wobei ich so spontan nicht wüsste, welche solch einen Code beinhaltet). Ich hab nen kleinen Workaround mit Blitz3D geschrieben, der mittels der Ausgabe von netstat -an prüft, ob ein Port frei ist. Vielleicht hilft das ja sonst noch weiter ![]() Code: [AUSKLAPPEN] Function IsTCPPortInUse(port%)
InUse% = False ExecFile "netstat -an > "+Chr(34)+"C:\netstat.txt"+Chr(34) FileIn = ReadFile("C:\netstat.txt") While Not Eof(FileIn) InputLine$ = ReadLine(FileIn) If Instr(InputLine, "TCP") Then StartPos% = Instr(InputLine, ":") InputLine = Mid(InputLine, StartPos + 1) EndPos% = Instr(InputLine, " ") InputLine = Left(InputLine, EndPos - 1) If port = Int(InputLine) Then InUse = True End If End If Wend Return InUse End Function CheckPort$ = Input("Check Port: ") If IsTCPPortInUse(Int(CheckPort)) Then Print CheckPort + " is in use" Else Print CheckPort + " is free for action" End If Ich hoffe, das hilft ein wenig weiter, Gruß Preachie |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
@Vertex Ich habe jetzt mal dieses s_WSAGetLastError mit in meine Fehlermeldung mit eingebastelt. Hatte gehofft, dass würde mir vielleicht irgendwie weiterhelfen ... eine Liste mit den Fehlercodes hatte ich mir auch schon ergoogled. Dann hatte ich es eben mit c64 ausprobiert..... "Die Verbindung konnte nicht aufgebaut werden. (Fehlercode: 0)" - ?? ![]() Wie genau soll ich die anderen Funktionen denn austesten, worauf muss ich da achten ? - eine direkte Fehlermeldung bekomme ich dort ja auch nicht ... @Preachie Vielen Dank für Deine Mühe! ![]() Hm, ich habe hier im Forum mal irgendwo gelesen, dass DirectPlay sehr viele freigeschaltete Ports benötigt. Nun kam mir vorhin die Idee, dass das womöglich daran liegt, dass DirectPlay sich für seine Verbdinungen erst einmal einen verfügbaren Port aus dieser Liste heraussucht, um einen reibungslosen Verbindungsaufbau zu garantieren. Ist meine Vermutung da richtig ?? |
||
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Ava,
hmm, seltsam, welches Betriebssystem setzt Du ein? Ich habe den Beispielcode auf Win XP Professional geschrieben, sollte aber an sich auch auf mehr oder weniger allen anderen Windows Versionen laufen. Was passiert denn, wenn Du eine DOS-Box aufmachst (Start->Ausführen...-> und dann cmd eintippen) und dort den Befehl netstat -an eingibst? Wird dann eine Liste zurückgegeben? Deine Frage nach DirectPlay kann ich leider nicht beantworten, doch verstehe ich im Moment auch noch nicht den Zusammenhang ![]() Gruß Preachie |
||
Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group