Netzwerk
Übersicht

ClaudioBetreff: Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() Niemand sagt dir vor, dass du damit unbedingt Chatnachrichten schicken musst. Du kannst damit genauso gut auch Playerpositionen, Bewegungen, Mitspielerbefehle und Postkarten verschicken ![]() 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 |
ClaudioBetreff: Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Willi die Rübe hat Folgendes geschrieben: Unterscheiden kann dann der Empfänger anhand von z.B. einem Präfix.
![]() |
||
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 |
ClaudioBetreff: Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Uff, und was bitte ist ein "Präfix?" Noch never davon gehört... | ||
![]() |
The Shark |
![]() Antworten mit Zitat ![]() |
---|---|---|
zB:
Für txtnachrichten : text jetzt kommt der text Für Positionsangaben : pos xposition yposition ... |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Latein? ![]() 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 ![]() 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. ![]() Edit: Huch die 2 letzten Beiträge waren eben noch nicht da ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
ClaudioBetreff: Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. | ||
ClaudioBetreff: Netzwerk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group