Game Net
Übersicht

X0rBetreff: Game Net |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo. Da ich in B3D jetzt mal ein Net Spiel programmieren will, hab ich einige Fragen:
Was ist besser? UDP oder TCP oder Direct Play? P2P oder Client Server? Lohnt es sich überhaupt ein 3D NET Shooter in B3D zu machen? Wird es flüssig laufen oder ist das GNET in B3D nicht so schnell? Kann mir bitte jemand ein sehr kleines Beispiel schicken(z.B ein kleines Chatprogramm oder mit Kreisen als Charakter. Bitte nicht so viel code. Möglichst klein. Nur das wichtigste!)? Danke im voraus. Angenommen, man nehme UDP und Client Server, wie macht man das mit Schüssen? Wenn ein Client schießt, müsste man dem Hoster ein Befehl schicken, oder? Der müsste das wiederum an alle verschicken, oder? Argh, wie geht das???? Bitte helfen. Ich will es dringend lernen!! Hab schon gesucht, aber nichts leichtes mit Erklärung gefunden. |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Ich glaube, du schmeißt BMax und B3D gehörig durcheinander.
2. Zum Thema UDP,TCP,DP: Das wurde schon dutzende male diskutirert. Suchen! Und wegen Client/Server: Das hängt ganz vom Spiel ab. Was haste denn vor? |
||
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Nein, warum?
Ego-Shooter, sagte ich schon. |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wegen dem GNet, welches auch als Netzwerk-Modul für BMax verfügbar ist.
Naja, für nen EgoShooter würde ich eine kombi empfehlen. Der Server kommuniziert Server/Client mäßig per TCP mit allen Clients und die Clients P2P mit UDP untereinander. Dabei must du schaun, dass wichtige, relevante Daten per TCP und unwichttigere, wie sich ständig ändernde Positions-Daten, per UDP gesendet werden. |
||
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das sagt mir jetzt nichts, da ich, wie ich schon als erstes gesagt habe, mich weder mit UDP sonst was, noch mit versanden von irgendwelchen Daten über net.
Ein Beispiel wäre net. Billigeer kleiner Chat oder sowas. Aber wenn die Clienten dem Server ihr Daten versenden und der Server den Clienten diese Daten nochmal versendet, warum sollen die Clienten sich nochmal gegenseitig den ganzen Mist senden? Hä? Hab ich was falsch verstanden? |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal nen paar Ergebnisse meiner Suche nach "Chat" im Codearchiv:
https://www.blitzforum.de/foru...light=chat <- UDP https://www.blitzforum.de/foru...light=chat <- TCP https://www.blitzforum.de/foru...light=chat <- UDP https://www.blitzforum.de/foru...light=chat <- DirectPlay |
||
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. + 2. + 3. zu lang. Das hilf nicht so viel.
4. ist DirectPlay. Das kann man für Ego Shooter ja wohl vergessen. Kann mir keiner ein kleines Beispiel senden? Nicht unbedingt ein Chat. Man soll nur heraussehen können, wie das mit UDP|TCP|Whatever funktioniert. Danke |
||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei aller Liebe, aber entweder schraubst du deine Ansprüche um einiges runter, oder du bewegst deinen (setze ein böööses Wort ein) selbst und informierst dich darüber. Onlinehilfe und Forumsuche reichen vollkommen aus, das ganze Thema wurde schon tausende Male durchgekaut.
Jedenfalls sehe ich das so, helfen würde ich dir wegen o.g. Gründe so nicht.. |
||
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok. Hab da mal was selber versucht.
Weiß aber nicht ob das klappt. Kann das bitte jemand überprüfen? Code für Hoster: Code: [AUSKLAPPEN] Type person Field name$ Field ip$ Field port End Type stream=CreateUDPStream() port=UDPStreamPort(stream) Print port ips=CountHostIPs("") If Not ips Then RuntimeError("Error. IP Error!") Else ipa=HostIP(ips) ip$=DottedIP(ipa) Print"IP: "+ip$ EndIf myname$=Input("Name: ") Repeat While RecvUDPMsg(stream) If ReadAvail(stream) Then streamid=ReadByte(stream) If streamid=1 Then name$=ReadLine(stream) person.person=New person person\name$=name$ person\ip$=UDPMsgIP(stream) person\port=UDPMsgPort(stream) ElseIf streamid=2 End name$=ReadLine(stream) message$=ReadLine(stream) For person.person=Each person WriteByte stream,2 WriteLine stream,name$ WriteLine stream,message$ SendUDPMsg(stream,person\ip$,person\port) Next EndIf EndIf Wend inp$=Input("Message: ") For person.person=Each person WriteByte stream,2 WriteLine stream,myname$ WriteLine stream,inp$ SendUDPMsg(stream,person\ip$,person\port) Next Until KeyHit(1) Code für Joiner: Code: [AUSKLAPPEN] stream=CreateUDPStream() port=UDPStreamPort(stream) ips=CountHostIPs("") If Not ips Then RuntimeError("Error. IP Error!") Else ipa=HostIP(ips) ip$=DottedIP(ipa) Print"Your IP:" +ip$ EndIf name$=Input("Name: ") WriteByte stream,1 WriteLine stream,name$ hip$=Input("Host ip: ") hostport=Input("Host port: ") SendUDPMsg(stream,hip$,hostport) Repeat While RecvUDPMsg(stream) If ReadAvail(stream) Then bit=ReadByte(stream) If bit=2 Then uname$=ReadLine(stream) umessage$=ReadLine(stream) Color 100,200,100 Print uname$+": "+umessage$ Color 255,255,255 EndIf EndIf Wend message$=Input("Mesage: ") WriteByte stream,2 WriteLine stream,myname$ WriteLine stream,inp$ SendUDPMsg(stream,hip$,hostport) Until KeyHit(1) |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Starte beide Instanzen nebeneinader auf Deiner Kiste und verwende als Ip 127.0.0.1 -> und schon kann das testen losgehen. | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ip zu meiner Hardware? funktioniert nicht. Habe ich schon längst ausprobiert. Ich glaube, das PRogramm ist fehlerhaft. Ich geh das nochmal durch.
Edit: Hab den Fehler gefunden. Hab aus versehen nur 1 Port erstellt(Zum senden und lesen). Und beim Joiner das gleicher. Bisschen ungünstig. |
||
![]() |
Smokie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst auch nur pro Client/Host einen Port.
Das geht schon. Grüße |
||
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer. Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jo ... aber er hat für Client und Host den gleichen Port genommen, was natürlich nicht funktioniert. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
X0r |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
..und außerdem habe ich, wie man oben sehen kann, die IP bei sendudpmsg stream,ip,port so als String versendet und nicht als Integer-Wert. Was natürlih auch nicht geht.
Habs verbesser und jetzt klappts. Thema beendet. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group