Socket Problem mit Netzwerkverbindung über TCP

Pringler

Mitglied
Hi Leute,
Ich bin gerade dabei ein kleines bombermanartiges Spiel zu programmieren, welches natürlich eine Multiplayeroption übers internet haben soll.
Bis jetzt habe ich normale Sockets für die Verbindung benutzt.
Ein User hat die möglichkeit einen Server zu erstellen, wobei er die ganzen berechnungen für das Spiel durchführt und die ergebnisse an die clienten weitergibt die sich bei ihm eine Verbindung aufbauen.

In einem lokalen Netzwerk funktioniert alles wunderbar, jedoch eine erfolgreiche Verbindung zu Rechnern im Internet bekomme ich nicht. (Der Methodenaufruf Socket socket = new Socket(String ip, int port); wirft bei dem externen clienten eine connectexception)

Nun ich weiß, dass die Router an denen die Rechner hängen ein hindernis sind .. und der user immer den port freigeben muss den er als server benutzt. Um das dem user nicht zutrauen zu müssen, dachte ich mir ich kann als port den http-port (port 80) benutzten, da der normalerweise so wie so schon bei allen routern freigegeben ist.

Beim recherchieren bin ich leider noch auf keinen grünen zweig gekommen :rtfm:
, wie ich dieses netzwerk übers internet realisieren kann.
 

XHelp

Top Contributor
Öhm... Port 80 ist (sinnvoller Weise) nur bei WebServern freigegeben. Und nicht nur freigegeben, sondern auch besetzt. Desweitere hat es nichts mit Portfreigabe zu tun, sondern vielmehr mit Portweiterleitung. Deswegen wirst du da nichts mit anfangen können. Außerdem gibt es keinen Port, der "bei allen normalerweise freigegeben ist". Ohne irgendwelche Tricks (angewandelte Version von UDP Hole Punching oder so) wirst du da nicht weiter kommen. Du könntest dir auch die peer-2-peer Netzwerke nach möglichen Lösungen anschauen, denn da ist das Problemm immer noch aktuell.

Aber halte deine Benutzer nicht für dumm, jeder der es braucht wird schon eine Portweiterleitung einstellen können. Du kannst ja notfalls auf irgendwelche Anleitungen zum Thema verlinken.
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Unterstützend könntest du dein Programm mit UPnP ausstatten. Sofern der Router UPnP beherrscht und auch aktiviert hat, kann ein Programm mit UPnP Funktionalität den Port im Router selbst freigeben, ohne dass der Nutzer selbst hand anlegebn muss. Azureus/Vuze können das z.B. auch.

Allerdings sind wohl die meisten Router in der Werkseinstellung mit ausgeschaltetem UPnP konfiguriert. ABER sofern der User das schon einmal eingeschaltet hat, kann dein Programm davon profitieren.

Ansonsten bleibt dir wirklich nur, wie schon erwähnt wurde, UDP Hole Punching und/oder ein P2P System, ODER - was noch nicht erwähnt wurde - ein "vermittelnder Server" der direkt erreichbar ist. Aber Server kosten Geld..... :)

- Alex
 

Pringler

Mitglied
Also danke schonmal für die vielen Antworten (endlich mal ein Forum in dem geholfen wird) :p
An einen vermittelnden Server habe ich auch schon gedacht, und es gibt genug kostenfreie server zu mieten, die java unterstützen (speicherplatz benötige ich so wie so nicht sehr viel).
Denoch möchte ich lieber auf andere Methoden zugreifen.

Kann mir jemand erklären was genau dieses UDP-Hole-Punching Prinzip ist.
Ich habe es schon öfters gelesen und auch versucht es zu googlen, jedoch weiß ich immer noch nicht genau wie udp hole punching funktioniert. Irgendwie tu ich mich in diesem Thema etwas schwer.

Also ich denke mal beim udp hole punching kann ich mir die idee mit den streamsockets abschmicken und muss auf datagrammsockets umsteigen, ist ja auch alles halb so wild.

Nur wie sieht so eine implementierung für so ein UDP-Hole-Punching aus?
Dabei möchte ich nochmal anmerken, dass die User später das Spiel einfach nur starten müssen ohne irgendwelche vorkehrungen am router oder sonstwo treffen müssen.

Danke schonmal im vorraus :)
 

XHelp

Top Contributor
An einen vermittelnden Server habe ich auch schon gedacht, und es gibt genug kostenfreie server zu mieten, die java unterstützen (speicherplatz benötige ich so wie so nicht sehr viel).
Vermutlich meinst du, dass es genug kostenfreie WebHosting Angebote gibt, die "java applet unterstützen". Das ist ja völlig was anderes. Außerdem brauchst du denn zwar kein Speicherplatz, dafür aber Trafic.

Kann mir jemand erklären was genau dieses UDP-Hole-Punching Prinzip ist.
Ich habe es schon öfters gelesen und auch versucht es zu googlen, jedoch weiß ich immer noch nicht genau wie udp hole punching funktioniert. Irgendwie tu ich mich in diesem Thema etwas schwer.
UDP hole punching - Wikipedia, the free encyclopedia
Die Theorie lässt sich eigentlich ganz gut begreifen.

Also ich denke mal beim udp hole punching kann ich mir die idee mit den streamsockets abschmicken und muss auf datagrammsockets umsteigen, ist ja auch alles halb so wild.
Naja, da gibt es auch eine TCP Variante, die hat aber nicht so großen Erfolg.

Dabei möchte ich nochmal anmerken, dass die User später das Spiel einfach nur starten müssen ohne irgendwelche vorkehrungen am router oder sonstwo treffen müssen.

Dabei möchte ich nochmal anmerken, dass es nicht klappen wird. Höhstens eben mit dem Zwischenserver, aber das ist keine gute Lösung.
 
T

tuxedo

Gast
Das wäre aber ein enormer Flaschenhals und würde überhaupt nicht skalieren.

Zeig mir einen hier im Forum der im Stande ist ein Spiel zu entwickeln das einen Server mit 100Mbit Netzanbindung vollends auslastet ... :)

btw: So Server wie "Teamspeak" vermitteln auch direkt über den TS-Server. Und dennoch haben tausende auf dem Server platz. In meiner Diplomarbeit hab ich Untersuchungen angestellt und bin zum Schluss gekommen, dass ein Server mit 100Mbit locker >=15.000 User bedienen kann (rechnung basiert auf dem Sprechverhalten eines "großen" TS - Servers mit >=4000 Usern). Und bei der Sprachübertragung fallen doch mehr Daten an als bei einem durchschnittlichen Spiel.

- Alex
 

Pringler

Mitglied
Hm okok...
Im übrigen bin ich gerade 1 jahr vor meinem abitur und bin kein studierender --> blutiger anfänger
Daher habe ich wenig erfahrungen und kenn mich mit servern schlecht aus.

Also ich habe mich jetzt dafür entschieden beim Router Problem dem user diese Möglichkeiten zu bieten:
- Portfreigabe am Router oder
- UPnP am Router aktivieren oder
- einen bereits bestehenden Server beitreten

Das Firewall Problem werde ich mit UDP-Hole-Punching umgehen, wovon ich das Prizip verstanden habe.
Ich weiß das beim UDP-Hole-Punching ein Vermittlerserver benötigt wird, aber da ich mich mit Servern, wie schon gesagt,
nicht auskenne, frage ich mich ob das ein Web-Server sein kann oder etwas anderes.
Muss ich vll ein Servlet schreiben oder nicht?

Kann ich meinen Webspace bei funpic.de (FTP und MySQL wird unterstützt) als Vermittlerserver benutzen?
 

Pringler

Mitglied
Hm ... stimmt auch wieder...

D.h. da ich persönlich keinen Servertauglichen PC rumstehen hab (der ständig laufen soll) und ich selbst keine kosten für dieses Projekt aufbringen will, fällt UDP-Hole-Punching bei mir flach .. ohne Vermittlerserver.

Das bombermanähnliche Spiel, soll mit dedicated Servern funktioniern. Also ein User eröffnet ein Spiel und fungiert selbst gleichzeitig als Server (Clients treten dem Spiel bei; senden ihre Rohdaten; Server sendet berechnete Daten zurück)

Nun welche möglichkeiten bleiben mir noch, diese Architektur möglichst sauber umzusetzen?
Wo kein UDP-Hole-Punching zwingend erforderlich ist?!
 

XHelp

Top Contributor
btw: So Server wie "Teamspeak" vermitteln auch direkt über den TS-Server. Und dennoch haben tausende auf dem Server platz. In meiner Diplomarbeit hab ich Untersuchungen angestellt und bin zum Schluss gekommen, dass ein Server mit 100Mbit locker >=15.000 User bedienen kann (rechnung basiert auf dem Sprechverhalten eines "großen" TS - Servers mit >=4000 Usern). Und bei der Sprachübertragung fallen doch mehr Daten an als bei einem durchschnittlichen Spiel.

Flaschenhals bleibt Flaschenhals. Kenne mich aber mit Teamspeak nicht aus um in dem Zusammenhang mit sinnvollen Argumenten zu kommen. Skype macht es z.B. auf p2p-basis.

Das bombermanähnliche Spiel, soll mit dedicated Servern funktioniern. Also ein User eröffnet ein Spiel und fungiert selbst gleichzeitig als Server (Clients treten dem Spiel bei; senden ihre Rohdaten; Server sendet berechnete Daten zurück)
Sicher, dass du "dedicated" richtig einsetzt?
Nun welche möglichkeiten bleiben mir noch, diese Architektur möglichst sauber umzusetzen?
Wo kein UDP-Hole-Punching zwingend erforderlich ist?!
Bleiben wir mal realistisch: wieviele Leute werden das Spiel spielen? Dieser überschaubaren Menge kannst du sogar persönlich erklären wie und wo die was einrichten müssen. Mach erstmal ganz normal auf TCP Basis, wenn du alles gut strukturierst wird du es später noch ändern können. Wenn du auf UDP umsteigst, dann stehst du vor anderen Problemen, die dir im Moment noch gar nicht bewusst sind.
 
T

tuxedo

Gast
Flaschenhals bleibt Flaschenhals. Kenne mich aber mit Teamspeak nicht aus um in dem Zusammenhang mit sinnvollen Argumenten zu kommen. Skype macht es z.B. auf p2p-basis.

Naja, kommt halt auf die Betrachtungsweise an. Flaschenhälse gibt es überall. Auch bei P2P. Nix skaliert unendlich gut. Man sollte vorher halt schauen was für anforderungen man hat (z.B. 500 Spieler) und dann schauen welche Lösung das am besten und kostengünstigsten abdeckt.

Aber zurück zum Thema:

Würde bei TCP bleiben. Gerade für Anfänger ist das deutlich einfacher zu benutzen.
Die Sache mit dem Portforwarding: Nun, viele werden sowas wie ne Fritzbox oder nen Speedport haben. Da ist das Portforwarding ein Kinderspiel. Bei den anderen Routern: Es gibt ja Handbücher ...

Alles in allem: Wer einen Server hinter einem Router hosten will, der hat halt das NAT-Problem an der Backe. Ohne Vermittlungsserver (UDP-Hole-Punching oder so wie TS) wirds nicht einfacher/besser.

UPnP Unterstützung kannst du in deinem Programm anbieten, aber mehr auch nicht. UPnP Libs findest du via google. Ganz einfach zu benutzen sind die glaub aber nicht.

- Alex
 

Pringler

Mitglied
Na gut, ich habe jetzt TCP weiter benutzt, und das Spiel ist im Freundeskreis ein lustiger Zeitvertreib geworden. Das Spiel funktioniert quasi nur im lokalen Netzwerk. (Hamachi wird benutzt).
Das Projekt ist mein Schuleprojekt und wird auf dem Gymmi sicherlich nicht so streng benotet :p.

Danke für das Posten. :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F problem mit thread bzw. netzwerkverbindung! Netzwerkprogrammierung 3
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10

Ähnliche Java Themen

Neue Themen


Oben