BNet - Netzwerkmodul / Kompatibel mit BlitzBasic

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

Neue Antwort erstellen

 

Inkubus

BeitragDo, Jul 21, 2005 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab es gefix mit

While Eof(TCP) <> -1

Danke für die url hatte ich aber schon gefunden.

hamZta

Administrator

BeitragMi, Sep 07, 2005 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragMi, Sep 07, 2005 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers mal mit BnetEx, dem nachfolger von Bnet Smile
Spiele & Security Tools
www.SelfSoft.org

Vertex

BeitragMi, Sep 07, 2005 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat das Modul noch jemand kompiliert herumliegen und würde es mir uploaden? Kann zur Zeit keine eigenen Module erstellen ...

Vertex

BeitragMi, Nov 16, 2005 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Sorry, falscher Thread Smile

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

BeitragDo, Nov 17, 2005 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, unbedingt nötig ist es nicht Wink Hatte gestern versucht meinen Server-Query Code mit BNetEx zum laufen zu bekommen, was aber nicht ganz funktioniert hat (Server hat keine Antwort gegeben, obwohl die Anfrage in Ordnung war). Muss ich mich heute mal richtig mit befassen.

shure_kyu

Newsposter

BeitragSo, Nov 27, 2005 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

Ava

Gast

BeitragSa, Jan 21, 2006 19:00
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. Sad

Vertex

BeitragSo, Jan 22, 2006 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

mfg olli
vertex.dreamfall.at | GitHub
 

Ava

Gast

BeitragSo, Jan 22, 2006 15:22
Antworten mit Zitat
Hi Vertex! Smile

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... Confused

BtbN

BeitragSo, Jan 22, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 22, 2006 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ava: Jaja, Bequemlichkeit immer allen voran Razz Ich pers. finde BNetEx doch um einiges logischer aufgebaut, aber ich kann es auch nachvollziehen, das BlitzBasic hier Maßstäbegesetzt hat.

BORNtobeNAMELESS: IntIP ist aber schneller. Beim Berkley Sockets gibt es nicht umsonst gethostbyname und ntoa.

mfg olli
vertex.dreamfall.at | GitHub
 

Ava

Gast

BeitragDi, Jan 24, 2006 1:55
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. Sad

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. Confused

Vielleicht hat da jemand eine Idee und/oder einen guten Rat für mich...

+ Ava +

preachie

BeitragDi, Jan 24, 2006 2:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink)

Solltest Du bezüglich der beiden Tools noch Fragen haben, sag einfach Bescheid.

Gruß
Preachie
 

Ava

Gast

BeitragDi, Jan 24, 2006 18:29
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. Confused

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

BeitragDi, Jan 24, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 24, 2006 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink). Damit würde schonmal die Firewall-Software als Fehlerquelle ausscheiden.

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 Wink

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
 

Ava

Gast

BeitragDi, Jan 24, 2006 23:47
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)" - ?? Confused ... wenn ich einfach wahllos an irgendeine IP verbinden will, bekomme ich hingegen Fehlercode: 1400. (der steht irgendwie nicht in der Liste mit drin, die ich gefunden hatte ... aber immerhin ist das schon mal etwas anderes, auch wenn mir diese "0" wieder nicht sehr viel weiterhilft - denn scheinbar hat er ja keinen Fehler gefunden ?!)

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! Smile Ich wollte Dein kleines Programm gleich austesten, doch irgendwie schreibt er mir die Netstats nicht in die Datei hinein, und folglich gibt es dann eine Fehlermeldung, der Stream würde nicht existieren. Woran kann das liegen, warum schreibt der diese Datei nicht ?? (das ExecFile wird ausgeführt, das sehe ich kurz aufblinken).

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

BeitragMi, Jan 25, 2006 1:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Embarassed

Gruß
Preachie

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group