F
fluxy
Gast
Hallo ich habe mir vorgenommen, einen multiclient Chat zu programmieren. Allerdings klappt das nicht so ganz. Es werden zwar meine Clienten abgenommen und über den Telnet kommt auch eine Willkommensnachricht an, allerdings funktioniert weder das senden noch das Empfangen.
Vom Prinzip her mache ich folgendes:
In meiner Serverklasse richte ich die Sockets ein:
und starte dann einen neuen Thread, und zwar für jeden User:
hiermit soll für jeden Client ein neuer Thread erzeugt werden. Die startup methode erzeugt dann die Streams und gibt eine Willkommensnachricht an den Clienten zurück (über das Socket)
Jetzt habe ich mir gedacht kann ich in meinem Thread (Die Userklasse ist von Thread abgeleitet deshalb auch die start-methode) in einer Endlosschleife immer wieder den selben String an den Client senden (aber es kommt hier nix an:
Information: Im Client starte ich analog dazu einen Thread, der für das Empfangen zuständig ist. Mache ich konzeptionell irgendwas falsch oder ist im Code ein Fehler? Ich bin mir noch nicht ganz sicher, wie ich das realisieren sollte, vielleicht kann sich das ja mal jemand anschauen.
Gruß
Vom Prinzip her mache ich folgendes:
In meiner Serverklasse richte ich die Sockets ein:
Code:
//Server.java
// hier eben die Membervariablen der Serverklasse
private ServerSocket mainSocket;
private Socket waitSocket;
private final int PORT = 12344;
private final String IP = "127.0.0.1";
private final int nPosClients = 10000;
private User userPool[];
private int nClients;
public Server() throws IOException
{
nClients = 0;
userPool = new User[nPosClients];
mainSocket = new ServerSocket(PORT);
waitForClients(waitSocket, "Willkommen.");
}
und starte dann einen neuen Thread, und zwar für jeden User:
Code:
//Server.java
private void waitForClients(Socket waitSocket, String welcomeMessage)
throws IOException
{
while (true)
{
waitSocket = mainSocket.accept();
System.out.println("New Client connected");
// Starte neuen Userthread
// =========================
userPool[nClients] = new User(waitSocket);
userPool[nClients].statup("Willkommen");
userPool[nClients].start();
nClients++;
}
hiermit soll für jeden Client ein neuer Thread erzeugt werden. Die startup methode erzeugt dann die Streams und gibt eine Willkommensnachricht an den Clienten zurück (über das Socket)
Code:
//Users.java
public void statup(String welcomeMessage) throws IOException
{
m_outputStream = new BufferedOutputStream(m_userSocket.getOutputStream());
m_inputStream = new BufferedInputStream(m_userSocket.getInputStream());
m_outputStream.write(welcomeMessage.getBytes());
m_outputStream.flush();
}
Jetzt habe ich mir gedacht kann ich in meinem Thread (Die Userklasse ist von Thread abgeleitet deshalb auch die start-methode) in einer Endlosschleife immer wieder den selben String an den Client senden (aber es kommt hier nix an:
Code:
//User.java
public void run()
{
StringBuffer tmp = new StringBuffer(64);
StringBuffer msg = new StringBuffer(64);
tmp.append("Neuer User connected: ");
tmp.append("TESTUSER");
System.out.println(tmp);
while (true)
{
try
{
StringBuffer test = new StringBuffer (64);
msg.append("test");
m_outputStream.write(test.toString().getBytes());
m_outputStream.flush();
//sleep(1000);
}
catch (IOException e)
{
}
}
}
Information: Im Client starte ich analog dazu einen Thread, der für das Empfangen zuständig ist. Mache ich konzeptionell irgendwas falsch oder ist im Code ein Fehler? Ich bin mir noch nicht ganz sicher, wie ich das realisieren sollte, vielleicht kann sich das ja mal jemand anschauen.
Gruß