ich konnt mich nicht entscheiden ob ichs hier oder in Netzwerkprogrammierung posten soll ich hoff mal es passt hier.
Ich hab 2 probleme mit der List die die Username der User die sich im Chat befinden anzeigen soll.
1. Wenn sich ein Client verbindet ist alles in Ordnung, kommt allerdings ein weiterer in den Chat "klaut" dieser sich die List mit den Usernamen, d.h. es kann immer nur der als letztes connectete Client die Liste sehen.
2. wenn der User seinen Namen ändert werden auch alle andere Namen geändert.
Beispiel: es sind User 1 und User 2 im Chat, User 2 ändert seinen Namen auf 3 und 1 heisst plötzlich auch 3.
Hier der meiner Meinung nach relevante Quelltext
Steh grad wirklich aufm schlauch und versuch das Problem schon seit ca 4 Stunden zu lösen.
Hoff jemand von euch hat eine Idee.
Danke im Voraus!
Gruß Maxi
Ich hab 2 probleme mit der List die die Username der User die sich im Chat befinden anzeigen soll.
1. Wenn sich ein Client verbindet ist alles in Ordnung, kommt allerdings ein weiterer in den Chat "klaut" dieser sich die List mit den Usernamen, d.h. es kann immer nur der als letztes connectete Client die Liste sehen.
2. wenn der User seinen Namen ändert werden auch alle andere Namen geändert.
Beispiel: es sind User 1 und User 2 im Chat, User 2 ändert seinen Namen auf 3 und 1 heisst plötzlich auch 3.
Hier der meiner Meinung nach relevante Quelltext
Java:
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.List;
import javax.swing.*;
public class chatserver implements Runnable
{
public final static int PORT = 9996; //used Port
public ServerSocket listen;
private Vector connections;
private static List users = new List(); //List with members of the chat
Thread connect;
public chatserver()
{
try
{
listen = new ServerSocket(PORT);
}
catch (IOException e)
{
System.err.println("Fehler beim Erzeugen der Sockets:" + e);
System.exit(1);
}
connections = new Vector();
connect = new Thread(this);
connect.start();
System.out.println("Server erfolgreich gestartet");
}
public void run()
{
try
{
while (true)
{
try
{
Socket client = listen.accept();
connection c = new connection(this, client);
connections.addElement(c);
}
catch (SocketException e)
{
System.out.println(e.toString());
System.out.println("test");
}
}
}
catch (IOException e)
{
System.err.println("Fehler beim Warten auf Verbindungen:" + e);
System.exit(1);
}
}
public static void main(String[] args)
{
new chatserver();
}
public void msgToAll(String strMessage)
{
int i;
connection client;
for (i = 0; i < connections.size(); i++)
{
client = (connection) connections.elementAt(i);
client.out.println(strMessage);
}
}
public static List getUsers()
{
return users;
}
public static void removeUsers(String name)
{
users.remove(name);
}
public static void setUsers(String name)
{
users.add(name);
}
}
Java:
import java.applet.*;
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
/**
* Created by IntelliJ IDEA.
* User: mwi
* Date: 26.05.2009
* Time: 12:55:55
* Todo Benutzeranzeige
* todo spammschutz
* todo adminbereich
*/
public class chatclient extends Applet implements Runnable
{
public final static int PORT = 9996; //Verwendeter Port
Socket socket;
BufferedReader inputStream;
PrintStream outputStram;
TextField inputField;
JTabbedPane pane;
Label useronline;
JPanel left;
JPanel bottom;
JButton send;
JTextArea outputArea;
JScrollPane spMsg;
JScrollPane spUserlist;
List users;
Thread thread;
String username = "tesdt";
public void init()
{
inputField = new TextField();
outputArea = new JTextArea();
spMsg = new JScrollPane(outputArea);
spUserlist = new JScrollPane(users);
pane = new JTabbedPane();
left = new JPanel();
bottom = new JPanel();
send = new JButton();
send.setText("Senden");
useronline = new Label();
useronline.setText("User online");
outputArea.setLayout(new BorderLayout());
outputArea.setFont(new Font("Dialog", Font.PLAIN, 12));
outputArea.setLineWrap(true);
outputArea.setWrapStyleWord(true);
spMsg.setViewportView(outputArea);
outputArea.setCaretPosition(outputArea.getText().length());
spUserlist.setViewportView(users);
this.setLayout(new BorderLayout());
left.setLayout(new BorderLayout());
bottom.setLayout(new BorderLayout());
this.add("West", left);
this.add("Center", pane);
this.add("South", bottom);
pane.add(spMsg);
pane.setTitleAt(0, "Hauptchat");
left.add("North", useronline);
useronline.setAlignment(Label.CENTER);
chatserver.setUsers(username);
users = chatserver.getUsers();
left.setSize(500, 40);
left.add("Center", users);
bottom.add("Center", inputField);
bottom.add("East", send);
this.setBackground(Color.LIGHT_GRAY);
this.setForeground(Color.black);
inputField.setBackground(Color.white);
outputArea.setBackground(Color.white);
send.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
String line = inputField.getText();
if (line != null)
{
outputStram.println(line);
inputField.setText("");
}
}
});
}
public void start()
{
try
{
socket = new Socket(this.getCodeBase().getHost(), PORT);
inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
outputStram = new PrintStream(socket.getOutputStream());
}
catch (IOException e)
{
this.showStatus(e.toString());
say("Verbinung zum Server fehlgeschlagen");
System.exit(1);
}
say("Verbindung zum Server hergestellt");
if (thread == null)
{
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
public void stop()
{
try
{
chatserver.removeUsers(username);
socket.close();
}
catch (IOException e)
{
this.showStatus(e.toString());
}
if ((thread != null) && thread.isAlive())
{
thread.interrupt();
thread = null;
}
}
public void run()
{
String line;
try
{
while (true)
{
outputArea.setCaretPosition(outputArea.getText().length());
users = chatserver.getUsers();
line = inputStream.readLine();
if (line != null)
{
if (line.startsWith("/nick"))
{
String newname = new String(line.substring(6));
if (newname.length() < 20)
{
users.remove(username);
chatserver.setUsers(newname);
username = newname;
}
else
{
say("Username zu lang kann nicht geändert werden");
}
}
else if(line.startsWith("/quit"))
{
chatserver.removeUsers(username);
socket.close();
}
else
{
outputArea.append(username + ": " + line + '\n');
}
}
}
}
catch (IOException e)
{
say("Verbindung zum Server abgebrochen");
}
}
public boolean action(Event e, Object what)
{
if (e.target == inputField)
{
String strInput = e.arg.toString();
outputStram.println(strInput);
inputField.setText("");
return true;
}
return false;
}
public void say(String msg)
{
outputArea.append("****" + msg + "****\n");
}
}
Steh grad wirklich aufm schlauch und versuch das Problem schon seit ca 4 Stunden zu lösen.
Hoff jemand von euch hat eine Idee.
Danke im Voraus!
Gruß Maxi
Zuletzt bearbeitet: