Netzwerk

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Claudio

Betreff: Netzwerk

BeitragSa, Jul 19, 2008 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen! Ich habe mir bei Robs Tutorial das zwölfte Kapittel genau angeschaut in dem er ja erklärt, wie man ein Netzwerk erstellt. Ich habe mir vorallem den DirectPlay Abschnitt genau durchgelesen. Mein Problem ist nun, dass ich zwar weiss, wie ich ein Chatsystem erstellen kann, jedoch frage ich mich, wie ich denn z.B. Befehle an den Mitspieler geben kann. Also z.B. wenn ich eine Taste drücke, dass beim Anderen irgend etwas passiert. usw... Wie kann ich es bewerkstelligen, dass die Programme untereinander komunizieren? Vielleicht kennt ja jemand auch noch ein anderes Netzwerk-Tutorial? Lieben Gruss, Claudio.

ozzi789

BeitragSa, Jul 19, 2008 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du das Tut gelesen und verstanden hast soltest du das verstehn =>
(leider habe ich es nicht und kan dir nur schreiben wie es wäre)

Code: [AUSKLAPPEN]

If keyhit(28)
Sende an IP eingabe$
endif


und auf dem anderen Pc

Code: [AUSKLAPPEN]

If signal von anderem Pc
print eingabe$
endif
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Willi die Rübe

BeitragSa, Jul 19, 2008 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf diesem Gebiet gibt es in BlitzBasic so gut wie keine vernünftigen Tutorials, hier liegt der Schlüssel letztendlich im eigenen ausprobieren.

Und ich würde auch TCP oder UDP vorziehen, da DirectPlay in der Regel langsamer ist und lustigerweiße ca. 100 Ports belegt.

Geh das Problem doch mal mit einer logischen Denkweise an. Du hast ein Befehl namens SendNetMsg. Damit kannst du Nachrichten schicken.

Zitat:
Mein Problem ist nun, dass ich zwar weiss, wie ich ein Chatsystem erstellen kann...[...]...
Wie kann ich es bewerkstelligen, dass die Programme untereinander komunizieren?

Nun, kommunizieren die Programme nicht in einem Chat? Oder ist das Telepathie? Wink
Niemand sagt dir vor, dass du damit unbedingt Chatnachrichten schicken musst. Du kannst damit genauso gut auch Playerpositionen, Bewegungen, Mitspielerbefehle und Postkarten verschicken Very Happy
Unterscheiden kann dann der Empfänger anhand von z.B. einem Präfix.

Soweit zur Verdeutlichung der Lösung. In einem richtigen Spiel allerdings muss man noch sehr viel optimierieren, um wirklich jedes überflüssig geschicktes Byte zu sparen. Schau dir dazu am besten mal Banks und die einzelnen Datentypen in der OnlineHilfe genau an, falls doch wirklich vorhast dies in einem Spiel zu integrieren. Den Netzwerkprogrammierung ist für Anfänger in der Regel ein sehr schwammiges und kompliziertes Thema und nicht unbedingt geeignet für den Einsatz im ersten Spiel.

Hoffe ich habe dich nicht entmutigt,
Mfg
Willi
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage
 

Claudio

Betreff: Netzwerk

BeitragSo, Jul 20, 2008 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi! Jo, das man die Befehle dem Programm wia "Chatmessage" geben kann, ist gut, aber das Programm muss ja wissen, dass es sich hier bei nicht nur um eine "normale" Message die für den User bestimmt ist handelt, sondern ein Befehl, den es ausführen soll. Genau da liegt das Prob... Gruss, Claudio.

Willi die Rübe

BeitragSo, Jul 20, 2008 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Willi die Rübe hat Folgendes geschrieben:
Unterscheiden kann dann der Empfänger anhand von z.B. einem Präfix.


Wink
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage
 

Claudio

Betreff: Netzwerk

BeitragSo, Jul 20, 2008 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Uff, und was bitte ist ein "Präfix?" Noch never davon gehört...

The Shark

BeitragSo, Jul 20, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
zB:
Für txtnachrichten : text jetzt kommt der text
Für Positionsangaben : pos xposition yposition
...

ToeB

BeitragSo, Jul 20, 2008 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du schreibst einfach eine "code" vor jede nachricht (z.b. von immer 3 Buchstaben+":")

Code: [AUSKLAPPEN]
SendText$ = "COM:CloseProgramm"
-Senden


Beim anderen :
Code: [AUSKLAPPEN]
RecvText$ -Empfangen
If Mid(RectText,4,1) = ":" then ;Wenn der Vierte Buchstabe ein ":" ist...
Praefix$ = Left(RecvText,3)
Nachricht$ = Mid(RecvText,4,Len(RecvText))
Select Praefix
Case "COM"
;Auswerten...
Case "POS"
Case "TXT"
...
End Select


Probier das mal Wink

mfg 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!

Willi die Rübe

BeitragSo, Jul 20, 2008 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Latein? Razz
Ein Präfix ist einfach ein vorangestelltes Kürzel.

Z.b.:
"msg Hallo" (Chatnachricht)
"pos 17|25|13" (Spielerposition)"
"shot 75|34|87" (Schuss zu der Stelle)
"jump" (Spieler springt)

So in der Art halt Smile

Natürlich sind Strings für Positionen absolute Pingbomben. Wie ich oben schon geschrieben hatte, wenn man eine Bank erstellt, dann kann man die Größe des Präfix auf ein Byte minimieren und Zahlen verschwenden auch kein Byte zuviel. Und wenn man diese Bank dann in einem bestimmten Zeitabstand sendet, spart man z.B. jedes Mal den TCP Header.
Bei UDP hingegen hat man den Vorteil, dass man keine Bank benutzten muss, da man mit den Read/Write Befehlen die Nachricht erst schreiben kann und diese dann zusammengefasst mit SendudpMsg gesendet werden.
Bei DirectPlay hingegen muss man sich selbst so ein "Zusammenfassungssystem" basteln, aber wie ich oben schon schrieb, UDP oder TCP ist vorzuziehen. Wink

Edit: Huch die 2 letzten Beiträge waren eben noch nicht da Smile
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

Hummelpups

BeitragSo, Jul 20, 2008 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
soetwas wird aber so nicht umgesetzt weils keinen nakten UBoot Fahrer interessiert
ob die Daten die übers Netz gehen lesbar sind oder nicht, dafür sind schließlich
Schicht 6 und 7 im Osi zuständig aber nicht 4.

Anstatt "pos" "jump" oder sonstigen unfug zu sparen sollte man anstatt der 3-4 Bytes einfach
1 Byte benutzen und ne Zahl von 1-255 davor schreiben.

bissl pseudocode gibts auch dazu:

firstbyte=readbyte
select firstbyte
case 1 neuer spieler
case 2 spieler beendet

natürlich reichen 255 manchmal nicht, also wären gruppierungen auch möglich
case 3 systemkommando
--secbyte=readbyte
--select secbyte
--case 1 session beendet
--case 2 kickmessage

Micha
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Willi die Rübe

BeitragSo, Jul 20, 2008 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
NetSick hat Folgendes geschrieben:
soetwas wird aber so nicht umgesetzt weils keinen nakten UBoot Fahrer interessiert
ob die Daten die übers Netz gehen lesbar sind oder nicht, dafür sind schließlich
Schicht 6 und 7 im Osi zuständig aber nicht 4.

Anstatt "pos" "jump" oder sonstigen unfug zu sparen sollte man anstatt der 3-4 Bytes einfach
1 Byte benutzen und ne Zahl von 1-255 davor schreiben.

bissl pseudocode gibts auch dazu:

firstbyte=readbyte
select firstbyte
case 1 neuer spieler
case 2 spieler beendet

natürlich reichen 255 manchmal nicht, also wären gruppierungen auch möglich
case 3 systemkommando
--secbyte=readbyte
--select secbyte
--case 1 session beendet
--case 2 kickmessage

Micha


Les mal meinen letzten Post komplett Rolling Eyes
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

Hummelpups

BeitragSo, Jul 20, 2008 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
bleib mal ganz geschmeidig, meinte damit wohl eher deine vorredner, und ja
habe deinen post so weit nicht gelesen.
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

Claudio

Betreff: Netzwerk

BeitragMo, Jul 21, 2008 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi! Danke viel mals für die vielen nützlichen Posts! Nun scheint mir doch einiges klarer zu sein. Wenn ich es richtig verstanden habe, können Befehle, Positionen etc mit einer ganz normalen Chat-Message rübergeschickt werden mit dem Unterschied, dass diese Nachricht ein sogenanntes "Präfix" haben muss was nichts anderes ist alsAnfürungs und Schlusszeichen in der Gramatik... Bin ich so weit auf dem richtigen Dampfer? Gruss, Claudio.
 

Claudio

Betreff: Netzwerk

BeitragMo, Jul 21, 2008 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi all! Nach dem mir hier ja von der Benutzung des Directplay-Aufsatzes abgeraten wurde, habe ich gemäss Empfehlungen UDP benutzt und mein erstes kleines Chatprogramm geschrieben. Wenn ich jedoch das Programm starte gibt er mir die meldung "invalid UDP stream handle." Weiss jemand worann das liegen kann? Ich poste hier mal den Code rein und bin auf eure Meinungen sehr gespannt. Wie gesat, es ist nichts weiter als ein kleines Chatprogramm. But anyway... Code: [AUSKLAPPEN]
 Graphics 640,480

sende_stream = CreateUDPStream(8001)
empfangs_stream = CreateUDPStream(8000)
IP_Adresse = RecvUDPMsg(empfangs_streaam)
If IP_Adresse <> 0 Then byte = ReadByte(empfangs_stream)
WaitKey
If KeyDown(57) Then
SendUDPMsg sende_stream, IP_Adresse
End If

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group