Ich möchte gerne eine Serverliste erstellen und nach einer gewissen Zeit x aktualisieren.
Also ich habe mehrere Server im Netz und ein par Clients.
Jetzt soll der Client alle Computer im Netz abfragen ob dort der Socket 665 verfügbar ist und ob er eine Antwort bekommt. Wenn er eine Antwort bekommt weis er das der Server auf dem Computer läuft, und er soll den Namen des Servers, und die IP des Servers in einer JList anzeigen, damit ich mit einem Doppelklich oder durch klick auf den Button genauere Serverinfos bekomme.
Meine Idee sieht so aus:
1. Eine Nachricht an alle Computer im Netz senden auf port 665.
2. Wenn ein Server läuft seine Adresse und Name zum Anfragenen Client zurückschicken
3. Name & IP in der JList ablegen
4. Mit Doppelklick oder Button auf Server connecten
Dort liegt mein Problem momentar daran, das ich nicht weis oder es nicht hinbekomme eine Nachricht an jeden Computer zu schicken, und eine Antwort zum Client zurückzuschicken.
Vielleicht würde mir ein Beispielcode oder vergleichbarer Code schon helfen
Dannach habe ich das Problem das das connecten nicht richtig funktioniert. Der erste Client kann zum Server verbinden und bekommt auch die richtige Nachhricht zurück. Dannach soll Client 2 verbinden. Doch dabei kommt es zur ein Exception.
Wobei ich das nicht verstehe.
Mein Client soll doch auf Socket 666 verbinden. Wenn dieses nicht klappt, soll er versuchen auf Socket 667 zu verbinden. Dieses klappt jedoch nicht.
Wo liegt denn da mein Fehler?
Server:
Client
Wäre sehr nett wenn sich jemand sich meiner Probleme annehmen könnte.
mfg. Dagobert
Also ich habe mehrere Server im Netz und ein par Clients.
Jetzt soll der Client alle Computer im Netz abfragen ob dort der Socket 665 verfügbar ist und ob er eine Antwort bekommt. Wenn er eine Antwort bekommt weis er das der Server auf dem Computer läuft, und er soll den Namen des Servers, und die IP des Servers in einer JList anzeigen, damit ich mit einem Doppelklich oder durch klick auf den Button genauere Serverinfos bekomme.
Meine Idee sieht so aus:
1. Eine Nachricht an alle Computer im Netz senden auf port 665.
2. Wenn ein Server läuft seine Adresse und Name zum Anfragenen Client zurückschicken
3. Name & IP in der JList ablegen
4. Mit Doppelklick oder Button auf Server connecten
Dort liegt mein Problem momentar daran, das ich nicht weis oder es nicht hinbekomme eine Nachricht an jeden Computer zu schicken, und eine Antwort zum Client zurückzuschicken.
Vielleicht würde mir ein Beispielcode oder vergleichbarer Code schon helfen
Dannach habe ich das Problem das das connecten nicht richtig funktioniert. Der erste Client kann zum Server verbinden und bekommt auch die richtige Nachhricht zurück. Dannach soll Client 2 verbinden. Doch dabei kommt es zur ein Exception.
Wobei ich das nicht verstehe.
Mein Client soll doch auf Socket 666 verbinden. Wenn dieses nicht klappt, soll er versuchen auf Socket 667 zu verbinden. Dieses klappt jedoch nicht.
Wo liegt denn da mein Fehler?
Server:
Code:
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.*;
public class Server implements Runnable {
ServerSocket sp1;
ServerSocket sp2;
public Server() {
try {
sp1 = new ServerSocket(666);
sp2 = new ServerSocket(667);
System.out.println("Server gestartet\nAuf Spieler warten...");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket( new byte[1024], 1024);
socket.receive( packet );
socket.close();
InetAddress clintadresse = packet.getAddress();
System.out.println("clintadresse : " + clintadresse.toString());
Socket socket1 = sp1.accept();
System.out.println("Spieler 1 verbunden");
BufferedWriter out1 = new BufferedWriter(new OutputStreamWriter(
socket1.getOutputStream()));
out1.write("Herzlich willkommen Spieler 1");
out1.flush();
out1.newLine();
out1.close();
Socket socket2 = sp2.accept();
System.out.println("Spieler 2 verbunden");
BufferedWriter out2 = new BufferedWriter(new OutputStreamWriter(
socket2.getOutputStream()));
out2.write("Herzlich willkommen Spieler 2");
out2.flush();
out2.newLine();
out2.close();
System.out.println("Server: Verbindung hergestellt\nSp1: "
+ sp1.getInetAddress() + "\nSp2: " + sp2.getInetAddress());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Client
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.*;
public class MultiplayLobby implements MouseListener, ActionListener {
int modus; // 0: Lan; 1: Online;
GamePanel gamepanel;
Timer getServerIntervall; // Intervall in dem die Serverliste aktualisiert
// wird
JList server; // Liste die alle verfügbaren Server beinhaltet
JButton startserver, startclient; // Butten um ein Spiel zu Starten
class listServer {
String name, ip;
public listServer() {
this.name = null;
this.ip = null;
}
public listServer(String name, String ip) {
this.name = name;
this.ip = ip;
}
public String getName() {
return this.name;
}
public String getIp() {
return this.ip;
}
}
JTextArea chatSee;
JTextField chatWrite;
public MultiplayLobby(int modus, GamePanel gamepanel) {
this.modus = modus;
this.gamepanel = gamepanel;
this.gamepanel.removeAll();
this.gamepanel.setBackground(Color.black);
this.gamepanel.updateUI();
getServerIntervall = new Timer(5000, this);
getServerIntervall.start();
server = new JList();
server.getModel().getElementAt(0);
server.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
server.addMouseListener(this);
server.setBounds(10, 10, this.gamepanel.getWidth() - 20, 150);
this.gamepanel.add(server);
startserver = new JButton("Spiel erstellen");
startserver.setSize(120, 40);
startserver
.setBounds(this.gamepanel.getWidth() - startserver.getWidth()
- 10, server.getHeight() + 20, 120, 40);
startserver.addActionListener(this);
this.gamepanel.add(startserver);
startclient = new JButton("Spiel beitreten");
startclient.setSize(120, 40);
startclient.setBounds(startserver.getX(), startserver.getY()
+ startserver.getHeight() + 20, 120, 40);
startclient.addActionListener(this);
this.gamepanel.add(startclient);
}
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int index = server.locationToIndex(e.getPoint());
System.out.print("Item: " + index);
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(getServerIntervall)) {
System.out.print("Neue Serverliste holen....");
try {
DatagramSocket ds = new DatagramSocket(665);
ds.setBroadcast(true);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
ds.send(packet);
System.out.println(packet.getAddress().toString());
ds.close();
} catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(" OK");
}
if (e.getActionCommand() == "Spiel erstellen") {
Server s = new Server();
Thread t = new Thread(s);
t.start();
}
if (e.getActionCommand() == "Spiel beitreten") {
Socket socket = null;
String ip = JOptionPane.showInputDialog(this.gamepanel,
"Server IP:");
try {
System.out.print("Verbinde (666)...");
socket = new Socket(ip, 666);
System.out.println(" OK");
} catch (UnknownHostException ev) {
System.out.println(" false");
} catch (IOException ev) {
System.out.println(" false");
try {
System.out.print("Verbinde (667)...");
socket = new Socket(ip, 667);
System.out.println(" OK");
} catch (UnknownHostException e1) {
System.out.println(" false");
} catch (IOException e1) {
System.out.println(" false");
}
System.out.println(" false");
} finally {
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
System.out.println(in.readLine());
} catch (IOException e2) {
System.out.println("Nachrichtenfehler");
}
}
}
}
}
Wäre sehr nett wenn sich jemand sich meiner Probleme annehmen könnte.
mfg. Dagobert