Hallo, ich habe ein kleines Problem:
Ich würde gerne ein Multiplayerspiel programmieren, das aber nicht über einen festen Server läuft (weder die Möglichkeit solch einen zu haben, noch wäre das bei vielen Spielern sinnlos, da sehr hoher traffic etc). Deshalb soll das Spiel über peer to peer laufen. Im privaten Netzwerk (bzw. Hamachi) funktioniert das einwandfrei, aber ich würde es auch gerne schaffen, dass man nicht hamachi haben muss. (nein, port forwarding kommt auch nicht in Frage, da das nicht jeder einstellen kann, es ist für eine breite Masse gedacht.)Dazu habe ich mich mal bei google informiert und diese Methode gefunden (wird z.b. von skype benutzt): http://en.wikipedia.org/wiki/UDP_hole_punching
Also gleich mal ausprobiert, aber in dieser Form klappt es leider mit einem Freund nicht. (Beide hatten das gleiche Programm gleichzeitig laufen, natürlich aber die IPs richtig angepasst.)
[autoit]
Global $other_ip = "andere IP hier eintragen."
Global $eigene_ip = @IPAddress1
Global $port = 5478
Global $udp_bind
Global $udp_open
AdlibRegister("standard_send", 500)
[/autoit][autoit][/autoit][autoit]UDPStartup()
[/autoit][autoit][/autoit][autoit]$udp_bind = UDPBind($eigene_ip, $port)
if @error Then MsgBox(0, "bind", @error)
$udp_open = UDPOpen($other_ip, $port)
if @error Then MsgBox(0, "open", @error)
While 1
$recv = UDPRecv($udp_bind, 2048)
If $recv <> "" Then
MsgBox(0, "Nachricht:", $recv)
EndIf
ToolTip("warte auf msg...", 0, 0)
WEnd
Func standard_send()
UDPSend($udp_open, "Standard_send")
if @error Then MsgBox(0, "send", @error)
TrayTip("Nachricht gesendet", "Nachricht an "&$other_ip&" gesendet!", 0)
EndFunc
Eventuell kann das noch jemand selbst testen, ob das bei ihm auch nicht funktioniert, oder ob das einfach an unseren Routern lag. Es wäre nett, wenn da jemand Bescheid weiß und mich aufklären könnte bzw sogar zeigen könnte, wie es sein müsste.
Danke schonmal im Voraus