BNetEx

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite 1, 2, 3 ... 11, 12, 13  Weiter

Neue Antwort erstellen

Vertex

Betreff: BNetEx

BeitragMo, Aug 29, 2005 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

Netzwerkmodul für Windows, Linux und MacOS
Super Strict
Objekt-orientiert
Unterstützung für UDP und TCP
Gepufferte Datenpakete
Domain to IP, IP to Domain
Beta: ICMP Ping, Netzwerkadapter-Informationen, Broadcasting
Deutsche Hilfedatei
Beispiele sind enthalten
Open Source
Einfaches Interface

Aktuelle Version
BNetEx wird auf GitHub gehostet: https://github.com/oliverskawronek/bnetex.mod

Ältere Versionen
http://vertex.dreamfall.at/bnet/bnetex170beta2.zip
http://vertex.dreamfall.at/bnet/bnetex170beta.zip
http://vertex.dreamfall.at/bnet/bnetex166.zip
http://vertex.dreamfall.at/bnet/bnetex165.zip
http://vertex.dreamfall.at/bnet/bnetex164.zip
http://vertex.dreamfall.at/bnet/bnetex163.zip
http://vertex.dreamfall.at/bnet/bnetex162.zip
http://vertex.dreamfall.at/bnet/bnetex161.zip

Für MacOS Benutzer
Die stabile Version v1.66 beinhaltet einen Fehler für das Betriebssystem MacOS. Dies kann behoben werden, in dem ihr die bnetex.bmx Datei öffnet, zur Zeile 73 springt und
Code: [AUSKLAPPEN]
   ?MacOS
      Const FIONREAD    : Int   = $4004667F
      Const SOL_SOCKET_ : Int   = 1 ' Not sure!
      Const SO_SNDBUF_  : Short = 7 ' Not sure!
      Const SO_RCVBUF_  : Short = 8 ' Not sure!

durch
Code: [AUSKLAPPEN]
   ?MacOS
      Const FIONREAD    : Int   = $4004667F
      Const SOL_SOCKET_ : Int   = $FFFF
      Const SO_SNDBUF_  : Short = $1001
      Const SO_RCVBUF_  : Short = $1002

ersetzt.
  • Zuletzt bearbeitet von Vertex am Mi, Sep 09, 2015 10:25, insgesamt 15-mal bearbeitet

regaa

BeitragMo, Aug 29, 2005 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Keep up the good work.

EDIT: @rema, hab dir ne pn geschrieben. Schau mal bitte nach Confused .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
  • Zuletzt bearbeitet von regaa am Mo, Aug 29, 2005 23:24, insgesamt einmal bearbeitet

rema

BeitragMo, Aug 29, 2005 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Finde ich super das du es oop machst. Es hat sehr viele Vorteile, vorallem gibts dann kein Spagetticode mehr.

Bin schon auf weitere Updates gespannt.
 

Inkubus

BeitragDi, Aug 30, 2005 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi habe etwas entdeckt im bmax.com Forum:
http://www.blitzmax.com/Commun...opic=50093

Vielleicht hilft es dir ja.

Gruß, Tim

Vertex

BeitragDi, Aug 30, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
rema: Danke

Inkubus: Jup, den Link kannte ich schon. Bringt bei TSockStream jedoch nicht viel.

Habe jetzt noch erlaubt, das man bei SetLocalPort eine 0 angeben kann, so dass das Betriebssystem autom. nach einem freien Port sucht. Diesen könnt ihr euch mit GetLocalPort zurück geben lassen.

Weiterhin gibt es jetzt auch ein ReadTimeout mit SetReadTimeout. Ob ein WriteTimout Sinn macht, muss ich mal schauen.

Naja ich konnte jetzt das Problem mit dem Lesen genauer eingrenzen. Wenn der Socket 14 Byte empfangen hat, jedoch ReadLine immer nur 1 Byte einliest via recvfrom, dann tritt dieser Fehler WSAEMSGSIZE auf. Lese ich z. B. in eine Bank mit genau 14 Byte größe aus, gibt es keine Probleme, auch wenn die Bank größer als 14 Byte ist.

Naja hier der Code:
Code: [AUSKLAPPEN]
editiert


mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Fr, Sep 02, 2005 23:25, insgesamt einmal bearbeitet
 

Inkubus

BeitragDi, Aug 30, 2005 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe glaube ich ein Fehler entdeckt


Code: [AUSKLAPPEN]
   Method Eof:Int()
      Local Read:Int

      ' If socket does not exist
      If Self.Socket = INVALID_SOCKET_ Then
         Return True <---- DADADADA
      Else
         ' Data can read?
         Read = Self.Socket
         If (select_(1, Varptr(Read), 0, Null, 0, Null, Self.ReadTimeout) ..
            = SOCKET_ERROR_) Or (Self.ReadAvail() = 0) Then

            Return True
         Else
            Return False
         EndIf
      EndIf
   End Method


Bessere wäre es wenn man -1 zurückt gibt oder False,
weil wenn der Socket nicht Okay ist würde man immer ein True bekommen. Und somit probieren von der Stream zu lessen.

Vertex

BeitragDi, Aug 30, 2005 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Eof = End Of File. Wenn Eof = True, dann kann vom Socket nciht gelesen werden.

mfg olli
vertex.dreamfall.at | GitHub
 

Inkubus

Betreff: Sorry

BeitragDi, Aug 30, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mist war ein denk Fehler.

Hättest du vielleicht noch ein Beispiel zum empfangen ?

Vertex

BeitragDi, Aug 30, 2005 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global Stream:TUDPStream

Stream = TUDPStream.Create()
Stream.SetLocalPort(1234)

While Not KeyDown(KEY_ESCAPE)
   If Stream.ReadAvail() Then
      While Not Stream.Eof()
         Print ">"+Stream.ReadLine()
      Wend

      Stream.SetRemoteIP(Stream.GetMessageIP())
      Stream.SetRemotePort(Stream.GetMessagePort())
      Stream.WriteLine("OK")
   EndIf
Wend

Stream.Close()
End


So sollte es später mal funktionieren. Das ReadAvail hätte man sich sparen können, da es Bestandteil von Eof ist, sieht aber besser aus Smile

GetMessageIP und GetMessagePort geben die IP und den Port des Senders der letzten empfangenen Nachricht zurück. Es wird also ein "OK" zurückgesendet Smile

mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Sa, Sep 03, 2005 16:56, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragDo, Sep 01, 2005 7:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, sage mal, wird es eine Möglichkeit geben, 1. die Netzwerk karte zu wählen,
2. Modem IP herrauszufinden?
between angels and insects
 

Inkubus

BeitragDo, Sep 01, 2005 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Vertex habe jetzt mal bank eingefügt zum buffern.
Aber jetzt habe ich ein neues Problem, das nur bei ReadLine die Methode Read aufgerufen wird....

Code: [AUSKLAPPEN]

edit
  • Zuletzt bearbeitet von Inkubus am Mi, Okt 26, 2005 0:19, insgesamt einmal bearbeitet

Vertex

BeitragFr, Sep 02, 2005 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Jan_: Die Netzwerkkarte kann man bei BerkeleySockets nicht wählen. Wäre ja auch OS abhängig. Die ModemIP heraus zu bekommen wird genauso wie bei BlitzBasic gehen. Also über HostIP (kommt noch in TNetwork rein)

Inkubus: Ich habe deine Idee mal aufgegriffen, jedoch nicht mit Banks sondern direkt mit allokierten Speicherbereichen. Wäre nett, wenn du dein langen Code ebenfalls editieren könntest, damit der Thread nicht unnötig lang wird. Wie ist dein richtiger Name, oder soll ich Inkubus stehen lassen?

Code: [AUSKLAPPEN]
editiert


Also die Daten zum schreiben/lesen werden vorher gepuffert. Die Puffer sind jeweils 1024 Byte groß(möp, hätte ich über ne Konstante vllt. regeln sollen).

Eine Nachricht muss vorher mit RecvMsg empfangen werden, und kann erst DANACH mit ReadLine usw. ausgewertet werden.

Das selbe gilt fürs senden einer nachricht. Erst die Nachricht mit WriteLine usw. schreiben, und dann Senden mit SendMsg.

Beispiel zum senden:
Code: [AUSKLAPPEN]
Strict

Framework Pub.BNetEx

Global Stream:TUDPStream

Stream = TUDPStream.Create()
Stream.SetLocalPort(1234)

Stream.SetRemoteIP(TNetwork.IntIP("127.0.0.1"))
Stream.SetRemotePort(4321)

Stream.WriteLine("Hello World!")
Stream.SendMsg()

Stream.Close()


Beispiel zum empfangen:
Code: [AUSKLAPPEN]
Strict

Framework Pub.BNetEx

Import Brl.StandardIO
Import Brl.System

Global Stream:TUDPStream

Stream = TUDPStream.Create()
Stream.SetLocalPort(4321)

While Not KeyDown(KEY_ESCAPE)
   If Stream.RecvMsg() Then
      Print "Message:"
      Print " - IP:   "+TNetwork.DottedIP(Stream.GetMsgIP())
      Print " - Port: "+Stream.GetMsgPort()
      While Not Stream.Eof()
         Print ">"+Stream.ReadLine()
      Wend
   EndIf
Wend

Stream.Close()


Wohlgemerkt ein UDPStream kann Senden UND Empfangen! Es ist nciht nötig 2 Streams zu erstellen.

Naja mal schauen, bei dem kleinen Modul werde ich vllt. mich mal dazu überwinden, und BBDoc für die Doku zu nehmen.

mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Sa, Sep 03, 2005 16:54, insgesamt 2-mal bearbeitet

Ninja

BeitragSa, Sep 03, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
es kommt ein error beim compilieren desmoduls Sad

Vertex

BeitragSa, Sep 03, 2005 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der wäre? Smile

Also für die, die nicht wissen, wie man ein Modul compiliert:
Im Ordner D:\BlitzMax\mod\pub.mod (der Blitzmax Pfad hängt davon ab, wo ihr BMax installiert habt)ein neuen ordner namens bnetex.mod erstellen, und in diesem eine neue Datei namens bnetex.bmx erstellen.

bnetex.bmx hat folgenden Inhalt:
Code: [AUSKLAPPEN]
editiert


Jetzt im Menü "Program" auf Build Modules klicken.


So ich habe mal jetzt noch TTCPStream eingeführt. Funzt aber noch nicht!

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSa, Sep 03, 2005 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
So, TCP scheint nun zu gehen:

Code: [AUSKLAPPEN]
Siehe neue Version


Server Beispiel:
Code: [AUSKLAPPEN]
Strict

Framework Pub.BNetEx
Import Brl.StandardIO
Import Brl.System
Import Brl.LinkedList

Global Stream     : TTCPStream
Global ClientList : TList
Global Client     : TTCPStream

Stream = TTCPStream.Create()
Stream.SetLocalPort(80)
Stream.Listen()

Stream.SetTimeouts(1000, 1000, 1000)

ClientList = CreateList()

While Not KeyDown(KEY_ESCAPE)
   Client = Stream.Accept()
   If Client Then
      Print( "New Client: ")
      Print( " - IP:   "+TNetwork.StringIP(Client.GetLocalIP()))
      Print( " - Port: "+Client.GetLocalPort())
      ClientList.AddLast(Client)
   EndIf

   For Client = EachIn ClientList
      If Client.Eof() = -1 Then
         Print( "Client has disconnected")
         Print( " - IP: "+TNetwork.StringIP(Client.GetLocalIP()))
         ClientList.Remove(Client)
         Continue
      EndIf

      While Not Client.Eof()
         Print( ">"+Client.ReadLine())
      Wend
   Next
Wend

Stream.Close()


Client Beispiel:
Code: [AUSKLAPPEN]
Strict

Framework Pub.BNetEx
Import Brl.StandardIO
Import Brl.System

Global Stream : TTCPStream

Stream = TTCPStream.Create()
Stream.SetLocalPort(0)

' Need TNetwork.HostIP("google.de")!
Stream.SetRemoteIP(TNetwork.IntIP("216.239.39.104"))
Stream.SetRemotePort(80)
Stream.Connect()

Stream.SetTimeouts(1000, 1000)

Stream.WriteLine("GET http://google.de/ HTTP/1.1")
Stream.WriteLine("")
Stream.WriteLine("")

While Stream.Eof() ; Wend

While Not Stream.Eof()
   Print Stream.ReadLine()
Wend

Stream.Close()


mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Sa, Okt 29, 2005 16:00, insgesamt einmal bearbeitet

Ninja

BeitragSa, Sep 03, 2005 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm.. oft kommen nachrichten garnicht an sorry aber so geht das nicht Neutral
Mit einfachen strings hin und her schicken gehts ja aber wenns zur sache geht ist das nutzlos :/ sonst toll...

Ninja

BeitragSa, Sep 03, 2005 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich z.b. das mache

Code: [AUSKLAPPEN]

Stream.writebyte(2) 'IP Request
Stream.SendMsg()


Stream.writebyte(1)
Stream.writeint(Len(name(1)))
Stream.writeString(name(1))
Stream.SendMsg()



kommt immer das mit dem 2er byte nicht an. :/

Ninja

BeitragSo, Sep 04, 2005 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Falscher alarm! hatte eine if bedingung falsch gesetzt tut mir sehr leid!
 

IonPainter

BeitragMo, Sep 05, 2005 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie siehts denn jetzt mit dem Empfangen aus, insbesondere im UDP Bereich? Sonst noch irgendwelche Bugs bekannt?

achja: Good Work Vertex, wie immer *daumenhoch*

Ninja

BeitragMo, Sep 05, 2005 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktioniert es bis jetzt super, gute arbeit vertex! Wink
Spiele & Security Tools
www.SelfSoft.org

Gehe zu Seite 1, 2, 3 ... 11, 12, 13  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group