BNetEx
Übersicht

Gehe zu Seite Zurück 1, 2, 3 ... , 11, 12, 13 Weiter
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann dein Modul leider nich kompilieren...
Fehler: Code: [AUSKLAPPEN] In file included from /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:2:
/usr/include/net/if.h:264: error: field 'ifru_addr' has incomplete type /usr/include/net/if.h:265: error: field 'ifru_dstaddr' has incomplete type /usr/include/net/if.h:266: error: field 'ifru_broadaddr' has incomplete type /usr/include/net/if.h:305: error: field 'ifra_addr' has incomplete type /usr/include/net/if.h:306: error: field 'ifra_broadaddr' has incomplete type /usr/include/net/if.h:307: error: field 'ifra_mask' has incomplete type /usr/include/net/if.h:379: error: field 'addr' has incomplete type /usr/include/net/if.h:380: error: field 'dstaddr' has incomplete type /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c: In function 'GetNetworkAdapter': /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:45: error: 'SIOCGIFHWADDR' undeclared (first use in this function) /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:45: error: (Each undeclared identifier is reported only once /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:45: error: for each function it appears in.) /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:46: error: 'struct ifreq' has no member named 'ifr_hwaddr' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_netmask' Build Error: failed to compile /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem wurde schon gelöst. Siehe hier. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Progger93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute ich bin jetzt gerade dabei zum 3. Mal mein Programm neu zu schreiben und Ich scheitere schon wieder an dem gleichen Problem..
Ich will ein simples Programm zum Datein versenden schreiben(Server + Client) Der Client sendet zwar alle dateien zum Server, aber der Server liest aus irgend einem Grund nicht alles aus. Hier mal die beiden Mainloops: Client:BlitzMax: [AUSKLAPPEN] Repeat Server:BlitzMax: [AUSKLAPPEN] Repeat Vermutlich liegt der Fehler daran, dass die Nachrichten falsch versendet/empfangen werden und somit nicht alles auf einmal ankommt. Wäre echt nett wenn ihr mir helfen könntet. |
||
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest dich unbedingt entscheiden, ob du zeilenweise oder binär sendest. Ich denke, die Mischung wird deinem Programm das Genick brechen. Wenn das letzte Package einer Datei z.B. nur 1 KB groß ist und sofort eine neue anfängt, dann kriegt das der Server nie mit, weil er denkt, dass der Anfang der neuen Datei noch zu den 4 KB der alten gehört. Weiterhin sendest du zwar den Dateinamen, liest ihn aber nicht aus.
Meine Empfehlung: Strings nicht per Write/ReadLine sondern per Write/ReadString übertragen. Weiterhin für jedes Package erstmal die Bytelänge des Packages übertragen, damit der Server auch die korrekt Anzahl an Bytes ausliest. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
https://www.blitzforum.de/foru...hp?t=34697
Dürfte das gleiche sein. Wie D2006 geschrieben hat oder ich in dem anderen Thread - Am Anfang einmal kurz die Dateigröße übertragen und dann beim Empfänger Repeat Until Dateigröße erreicht. |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
Progger93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm bei mir funktioniert es bisher jetzt, solange ich direkt die .exe starte. Starte ich hingegen das Programm mit BLIde/MaxIDE geht nichts ![]() Client:BlitzMax: [AUSKLAPPEN] Repeat Server:BlitzMax: [AUSKLAPPEN] For Local c:TClient = EachIn ClientList |
||
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey hey,
habe mal gerade eine eher die Logik betreffende Frage zu dem ganzen... Code: [AUSKLAPPEN] If UDPStream.RecvAvail() Then While UDPStream.RecvMsg() ; Wend While Not UDPStream.Eof() Local udpplayer:Tplayer = SearchClient(udpstream.ReadInt())'eher unwichtig für meine frage ReadUDPMessage(UDPStream.ReadByte(), udpplayer)' Wertet die nachricht aus Wend EndIf Diesen Abschnitt hab ich in der Hauptschleife stehen um eben UDP-Abfragen reinzubekommen, nun frage ich mich doch, was passiert, wenn zwei Leute gleichzeitig eine Anfrage an den Server schicken... Bzw wenn beides gleichzeitig von Recvmsg() aufgenommen wird. Denn das Problem wäre nicht, dass da irgendwie zwei Datenströme zusammenkommen, nur muss ich in ReadUDPMessage(...) ja gegebenenfalls auf den Client antworten, jedoch weiß der Server dann ja über udpstream.getmsgip() bzw udpstream.getmsgport() nur die IP und den Port von einem der clients und würde dann zwar beide Anfragen auswerten und auch Antworten schicken, da aber dieser get-kram nur vom letzten speichert würde ein Client zwei Antworten kriegen und der andere keine? Oder sieht das in der Praxis anders aus und z.B. Client A blockiert für den Schleifenablauf dann ReceiveMSG() und Client B kommt dann im nächsten dran? Wobei das ja eventuell irgendwo ineffizient wäre... Gibt es einen Befehl, der Ip/port des senders von dem zuletzt abgearbeiteten Byte/int/wasauchimmer ausgibt? Oder hab ich die Befehlsbeschreibung falsch verstanden...? Gruß |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt leider nichts Neues zu BNetEx. Ich habe auf meiner Festplatte noch ein paar Hilfsfunktionen gefunden, die bei der Netzwerk-Programmierung hilfreich sein könnten. Ehe sie dort verstauben, poste ich sie lieber hier. Das war ursprünglich mal für eine grundauf neue Version von BNetEx als Zusatzmodul gedacht ![]() Es bietet CRC16, CRC32, MD5, SHA1, SHA256, RC4. Bei der Huffman-Komprimierung kann ich mich noch daran erinnern, dass sie schonmal den Baum korrekt als Header kodieren konnte, aber den Inhalt selber nicht. Also hier Finger weg, ist nicht für den produktiven Einsatz. Den Rest habe ich immer in ein paar Tests mit PHP verglichen, glaube ich ![]() BlitzMax: [AUSKLAPPEN] SuperStrict Ciao Olli |
||
vertex.dreamfall.at | GitHub |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi !
Ich hab mal ne Frage. Ich wollte über die BNetEx in BlitzMax mit einem Programm in Blitz3D über UDP kommunizieren (Das es geht hab ich schon an simplen Sende / Empfangen Codes getestet). Jetzt möchte ich allerdings das ganze mit meiner SimpleUDP3.0 verbinden, und diese sendet die Daten nicht nur einmal sondern solange bis die Nachricht angekommen ist. Jetzt zu meiner Frage: Kann ich mit dem TUDPStream auch Nachrichten an mehrerer Clients senden? Ich dachte mir das so, das ich vor jeder Nachricht die Remote-IP neu zuweise und dann Absende.. Denn: Wenn ich mit Blitz eine Nachricht sende kommt immer eine Leere Nachricht mit der IP 0.0.0.0:0 an, liegt es daran das ich immer neue RemoteIP's zuweise ? Edit: Sry hatte vergessen RecvMsg auszuführen ![]() lg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin hier grade am Verzweifeln... Auf der einen Seite muss man sich ums Puffern kümmern (nicht mehr als 1500 Bytes in ein TCP-Paket schreiben), auf der anderen Seite doch nicht (Server sendet mehrere Pakete [damit man 1500 Bytes nicht überschreitet] -> Trotzdem kommen bei Client mehrere Pakete zu einem zusammengeschnürrt an, und damit kann ich sie nicht mehr ordentlich zählen, weil mir ja keine Funktion sagt, was passiert ist)?
Also die Frage: Was meinst du mit "Puffern"? |
||
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich weiß ja nicht, was du genau vorhast, aber du kannst die Pakete problemlos mitzählen.
Ich vermute, dass du ein ganz simples While Client.RecvMsg() ; Wend verwendest. Wie du siehst, ist das eine While schleife, sprich wenn du einfach nur Client.RecvMsg() ausführst, dann erhälst du genau ein Paket. Zum loggen kannst du natürlich dann auch die Schleife behalten... BlitzMax: [AUSKLAPPEN] Local x%=1 Und dann dementsprechend Aktionen vornehmen. Was du auch machen kannst, falls du z.B. Dateien überträgst (dann solltest du es vorallem machen!) ist, die Dateigröße vorher in einem Int zu schicken. Dann weiß der Verbindungspartner nämlich genau, wann Schluss ist. |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau das geht nicht, weil ich, wenn ich serverside 2 Pakete sende, manchmal beim Client ein ankommt, wo eben der Inhalt von beiden drinsteht... :/
Und ja: ich brauche es zum simplen downloaden einer Datei |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht liegt es ja daran, dass das erste Paket sich noch im Speicher befindet, ohne ausgelesen worden zu sein, und das zweite deshalb einfach darüber "gestapelt" wird
Wenn du jetzt ausließt, bis der Stream leer ist (also eventuell mehrere Pakete), ließt du natürlich alle Sachen aus, die im Stream sind, wenn du die Zählervariable danach dann erst erhöhst, bekommst du falsche Ergebnisse. ![]() Ich denke mal, daran liegts. Sendest du was ab, dann wird es auch gesendet, und nicht irgendwie autovervollständigt. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin mir eigentlich zu 100% sicher, dass ich exakt 1024+4 (1028) Bytes pro Paket versende... nur manchmal sind eben 2056 Bytes im Stream, jedenfalls nach den Info's die RecvAvail ausspuckt (+RecvMsg).
Dass der Server schneller sendet, als der Client empfängt, ist auch klar, doch sollte doch pro RecvMsg-Aufruf nur ein Paket geladen werden, und nicht 2, die zusammenkleben. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
RecvMsg zeigt dir nur an, ob Nachrichten empfangen wurden, und liefert die IP zurück.
RecvAvail liefert dir die größe der Daten im Stream! Nachdem die Pakete einzeln über TCP versendet wurden, werden sie halt in den Stream gesteckt. Wenn du die Größe des Streams also ausließt, ließt du nicht die Daten von einem TCP-Paket, sondern von allen TCP-Paketen, die im Stream darauf warten, gelesen zu werden. Zitat: Dass der Server schneller sendet, als der Client empfängt, ist auch klar, doch sollte doch pro RecvMsg-Aufruf nur ein Paket geladen werden, und nicht 2, die zusammenkleben.
Wenn der Server schneller sendet, als der Client bearbeitet, führt das unweigerlich zu Datenstau vom feinsten. Und RecvMsg lädt garnichts, sondern liefert dir nur einen Wert ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, und wie kann ich bezwecken, dass ich nur ein Paket in die Hand kriege? Wenn nicht würde ich mir nen nervigen Work-Around schreiben...
Nachrichtenstau? Ein bisschen Erfahrung hab ich ja schon, in Sachen Netzwerk. ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du nicht per Protokoll definiert hast, wie viele Daten es zu lesen gibt, machst du irgendwas komisch. Mir fällt auf jedenfall nicht ein, was man machen könnte, wo man nicht weiß, wie viel man Lesen muss, um ein Paket zu bekommen. | ||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, weis ich ja... Ist nur sehr sehr viel nerviger zu handeln... Vlt. hab ich auch einfach nen Denkfehler / Denkblockade im Hirn... (zu lange wach + EnergyDrinks [Relentless ist super! ![]() Ich werde es anders machen... (vor den 30 Paketen, ein Integer, wo die Gesamtbyte-Zahl drinsteht, dann lese ich den ganzen Müll aus... ![]() |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mache das immer so, dass ich am Anfang der Nachricht ein Byte/whatever habe, das festlegt, wie mit der Nachricht weiter umgegangen werden soll. Ist wohl die flexibelste und leichteste Lösung.
zum Beispiel für die Anmeldung am Server Byte 1, für irgendwas anderes Byte 2, und für ausloggen Byte 3, ect, ect. Beim auslesen kannst du das dann so machen: Pseudocode Code: [AUSKLAPPEN] If ErstesByteDerNachricht=1 Then
ReadString() ReadString() ReadByte() ElseIf ErstesByteDerNachricht=2 Then ReadInt() ReadInt() ReadLine() [...] EndIf |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weis, das mache ich auch so... nur genau an dieser Stelle nicht. Wenn der Client eine Datei requestet, sendet der Server 30 Pakete am Stück, wenn ein "seek"-Paket (erstes Byte = 4) vom Client kommt. | ||
Gehe zu Seite Zurück 1, 2, 3 ... , 11, 12, 13 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group