Java-Sockets funktioniert über LAN, aber kein Internet?
Hallo, ich mache ein Java multiplayer-Spiel und alles funktioniert einwandfrei.
Es hat alle jemanden brauchen würde, aber ich fand ein problem, es nutzt ServerSocket für server und Socket-für Kunden, funktioniert gut, aber das große problem ist, dass es nicht funktioniert über weltweit. Nur LAN, ich habe sogar versucht Hamachi, aber das hat nicht funktioniert, auch.
Haben Sie irgendwelche Ideen, was funktionieren würde?
Paar mehr Infos: ich benutze einen bestimmten thread im server für das akzeptieren, senden und empfangen von sockets und auch bestimmten thread im client zum senden und empfangen. Es sendet ein Objekt, das ich gemacht und enthält alle Informationen.
ip = InetAddress.getLocalHost().getHostAddress() + ":" + port;
server = new ServerSocket();
//This asks you if you want to use a specific IP or just the one that we got in first line
String socketaddress;
socketaddress = (String) JOptionPane.showInputDialog(null, "IP: ", "Info",JOptionPane.INFORMATION_MESSAGE,null,null,InetAddress.getLocalHost().getHostAddress());
server.bind(new InetSocketAddress(socketaddress, port));
//Here it starts the accept thread, and then it starts send and receive threads
new Thread(accept).start();
Hier ist das Zeug aus dem client, das finde ich am wichtigsten:
socket = new Socket(ip,port);
String set_username = System.getProperty("user.name");
set_username = (String) JOptionPane.showInputDialog(null, "Username: ", "Info", JOptionPane.INFORMATION_MESSAGE,null,null,set_username);
username = set_username;
//It sends the username to server
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(username);
//Then server responds with a message
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String response = (String) ois.readObject();
//This writes the server' message
JOptionPane.showMessageDialog(null, response, "Message",JOptionPane.INFORMATION_MESSAGE);
Außerdem habe ich ein weiteres problem, die buchsen nehmen wie 3 oder 4 Sekunden, um aus 1-client zum anderen und es sollte fast instant, weil es auf dem gleichen Netzwerk und ich habe eine schnelle Internetverbindung.
BEARBEITEN:
Ich habe versucht einen server erstellen auf dem gleichen pc mit client und dann, wenn der Beitritt mit Hilfe meine Globale IP hat nicht funktioniert 🙁
BEARBEITEN:
SEINE ARBEITEN IM SO GLÜCKLICH JETZT HATTE ich ZU TUN IST, FÜGEN Sie die PORTS IN den FIREWALL-vielen DANK JUNGS :D. JETZT KANN ich MIT MEINEN FREUNDEN SPIELEN :3
Ja, ganz sicher, und die firewall auch.
Und ein Benutzer auf das internet mit telnet auf einen Dienst auf Ihrem Computer unter Verwendung nur der hostname/IP und port-Nummer?
InformationsquelleAutor IvanDonat | 2012-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine Verbindung zu einer Java-web-server im internet wird es mit ServerSocket und Socket. Das funktioniert ganz gut.
Was wahrscheinlich nicht funktioniert ist, dass Benutzer auf das Internet kann keine Verbindung zu Ihnen, weil Sie hinter einer firewall oder einem router/NAT (nichts zu tun mit Java). Bis ein Benutzer auf das internet können telnet an einen port auf Ihrem Rechner durch eine IP-Adresse, die mit Java nicht machen dieses anders.
BTW: Sie sollten immer erstellen Sie Ihre ObjectOutputStream UND flush() vor dem erstellen der ObjectInputStream sonst der ObjectInputStream auf der anderen Ende kann immer blockieren.
Wohin mit flush()?
"flush() vor dem erstellen der ObjectInputStream" 😉
InformationsquelleAutor Peter Lawrey
Müssen Sie Lesen, auf firewalls (die regelt was erlaubt ist zu verbinden in einer Maschine, die von außerhalb des LAN), port-Weiterleitung (die forward-öffentlichen IP-Adressen, um interne IP-Adressen), und IP-Adressierung im Allgemeinen (die geben Ihnen einige Informationen, wie IP-Adressen arbeiten, was von public/private und wie Daten wird übertragen über Netzwerke).
Davon, es wäre wirklich hilfreich, wenn in Zukunft Fragen, würden Sie nach, was IP-Adressen, die Sie verbinden sind von und zu (öffentlich oder anderweitig), welche Fehlermeldungen auftreten (nicht nur den code), und was hast du bereits versucht und sind gescheitert an. Die F/A auf stackoverflow ist nicht dazu gedacht, um eine Problembehandlung bei der Sitzung - wir brauchen wirklich spezifische Fehlermeldungen, wie Ihr port-forwarding konfiguriert ist, welche firewall(s) sind vorhanden, usw., und die Dinge, die Sie versucht haben. Derzeit, es gibt viele potenzielle Probleme, die mit weltweit spielen gegeben, den code, den Sie gepostet hast (obwohl der code kann eigentlich nicht das problem sein - es ist wohl eher ein Konfigurations-Problem).
Ich bin im Grunde sagen, dass, während dies ist eine unglaublich umfassende Antwort, aber deine Frage ist auch unheimlich breit und nicht um ein klares problem.
Ok, aber das bedeutet, dass die Verbindung nicht funktioniert - das wissen wir. Die Ursache könnte sein, überall in Ihrer firewall - /port-forwarding-Konfiguration, und könnte auf dem client und/oder server-Seite, könnten alle Kunden oder nur Kunden, etc. Leider, es ist nicht genug, um so eine Breite Fehlermeldung. Sie gehen durch Ihre Konfiguration und testen Sie jeden Schritt der Verbindung auf dem Weg, herauszufinden, Schritt die Verbindung fehlschlägt, und beginnen mit einer viel mehr spezifische Frage aus diesem Punkt, mit der zugehörigen Protokolle, Fehler-und Konfigurations-details.
Okay, ich erlaubte ports auf der firewall ein-und ausgehenden und-Anschluss weitergeleitet (erneut) jetzt werde ich testen, das Spiel normal und über hamachi 🙂
InformationsquelleAutor jefflunt
Müssen Sie eine statische IP-Adresse von Ihrem ISP erhalten haben, und Sie müssen, leiten Sie den port in Ihrem router auf die LAN IP des Servers, den Sie verwenden, ab. 192.168.1.xxx Hinweis: einige ISP nur statische IP für business Kunden. Fragen Sie bei Ihrem ISP. auch stellen Sie sicher, dass die firewall auf dem Computer, den Sie verwenden, wie ein server den port, den Sie verwenden, öffnen. Ich bin sicher, Sie wusste das, weil Sie sagten, Sie haben es arbeiten auf der LAN. aber ich dachte, ich erwähne es für diejenigen, die dies Lesen, wenn Probleme mit der Verbindung über LAN und WAN.
InformationsquelleAutor user2676756