Chat-Client

Status
Nicht offen für weitere Antworten.

TheDestroyer

Aktives Mitglied
Hallo,

soll für die Uni einen Chat-Client in einem Applet programmieren. Wie mache ich das denn m besten. Habe mir gedacht das ich ein Textfeld, ein Button (fürs Senden) und ein Ausgabefeld benötige. Zusätzlich zur Nachricht können Texteigenschaften übermittelt werden, wie Schriftfarbe (2), Schriftart (3), Schriftgröße (5), Hintergrundfarbe (7).
Beim Verbindungsaufbau muss dazu einmalig ein Init-Wert (Integer) übermittelt werden, mit welchem dem Server mitgeteilt wird, was mit den Nachrichten gesendet werden soll. Diese Zahl berechnet sich aus dem Produkt der Primzahlen (Klammerausdruck hinter der Texteigenschaft).
Zur Ausgabe der Nachrichten solltet iich ein JTextPane verwenden.

Kann mir hier jemand helfen der das vielleicht schonmal gemacht hat. Vielleicht wie man erstmal anfänngt. Hab da jetzt noch nicht wirklich den großen Plan. Hab jetzt zwar schon mal ne Skizze gemacht wie es nachher aussehen soll.
Wie bekomme ich es z.B. hin das mein Text aus der TextBox auf dem Ausgabefeld ausgegeben wird?

Hoffe ihr könnt mir helfen.

THX!!!!
 

TheDestroyer

Aktives Mitglied
hallo, eigentlich brauch ich doch jetzt nur ein chat-applet, oder, denn der server wird ja von der uni gestellt. muss mich doch dann nur unter passender adresse und port einwählen. oder verstehe ich da etwas falsch?
 

placebo

Mitglied
Hi TheDestroyer,

das Grundprinziep eines Chatclients ist idr. nicht sehr schwierig.

Du hast ein Textfeld zur Eingabe und ein Textfeld zur Ausgabe. Anfangs stellst du eine Verbindung zu dem Server her und tauscht ggf. initiale Daten mit diesem aus.
Im Anschluss holst du dir von der Verbindung einen InputStream, InputReader oder ähnliches und lässt innerhalb einer Endlosschleife, welche wiederum in einem eigenen Thread läuft, die rein kommenden Daten des Servers auslesen. Die kannst du dann immer direkt an das Textfeld zur ausgabe rein schreiben.
Ausserhalb des Threads kannst du dann über einen EventListener die Daten aus dem Textfeld auslesen und mit Hilfe eines OutputStreams bzw. einem Writer die Daten an den Server schicken.

Das ist zumindest eine grobe Struktur. Habe selber mal so ein Applet geschrieben inkl. dem Server dahinter. Das Applet ansich ist garnicht so schwer, du musst nur schaun wie du deine Textsachen rein bekommst.

Grüße,
placebo
 

TheDestroyer

Aktives Mitglied
Hab jetzt nur mal so als Beispiel einen Code. Wie und wo füge ich dort denn jetzt ein auf welchen host er zugreifen soll, sprich auf die Seite welchen den Server stellt.

Code:
package Chat;

import java.net.*; 
import java.io.*; 
import java.awt.*; 
import java.applet.*; 

public class chatapplet extends Applet implements Runnable 
{ 
   public Frame f; 
   public static final int PORT = 63631; 
   Socket socket; 
   DataInputStream in ; 
   PrintStream out; 
   TextField inputfield; 
   TextArea outputarea; 
   Choice choiceChannel; 
        List users;  
   Thread thread; 

   public void init() 
   { 
f = new Frame("Agent159's knuddeliger Chat"); 
f.addWindowListener(new java.awt.event.WindowAdapter() { 
   public void windowClosing(java.awt.event.WindowEvent e) { 
      f.dispose(); 
                     }   }); 

      inputfield = new TextField(); 
      outputarea = new TextArea(); 
                users = new List(); 
      outputarea.setFont( new Font("Dialog", Font.PLAIN, 12)); 
      outputarea.setEditable(false); 
f.add(inputfield); 
f.add(outputarea); 
f.add(users); 
      f.setLayout(new BorderLayout()); 
      f.add("South", inputfield); 
      f.add("Center", outputarea); 
                f.add("East", users); 
      f.setBackground(Color.lightGray); 
      f.setForeground(Color.white); 
      inputfield.setBackground(Color.darkGray); 
      outputarea.setBackground(Color.darkGray); 
      users.setBackground(Color.darkGray); 
f.pack(); 
f.setSize(800,600); 
f.show(); 

} 
   public void start() 
   { 
      try 
      { 
         socket = new Socket(this.getCodeBase().getHost(), PORT); 
         in = new DataInputStream(socket.getInputStream()); 
         out = new PrintStream(socket.getOutputStream()); 
         say("Verbindung zum Server aufgenommen..."); 
      } catch (IOException e) 
      { 
         this.showStatus(e.toString()); 
         say("Verbindung zum Server fehlgeschlagen!"); 
         //System.exit(1); 
      } 

      if (thread == null) 
      { 
         thread = new Thread(this); 
         thread.setPriority(Thread.MIN_PRIORITY); 
         thread.start(); 
      } 
   } 


   public void stop() 
   { 
      try 
      { 
         socket.close(); 
      } catch (IOException e) 
      { 
         this.showStatus(e.toString()); 
      } 

      if ((thread !=null) && thread.isAlive()) 
      { 
         thread.stop(); 
         thread = null; 
      } 
   } 


   public void run() 
   { 
      String line; 

      try 
      { 
         while(true) 
         { 
            line = in.readLine(); 
            if(line!=null) 
               outputarea.appendText(line+'\n' ); 
         } 
      } catch (IOException e) { say("Verbindung zum Server abgebrochen"); } 
   } 
   public boolean action(Event e, Object what) 
   { 
      if (e.target==inputfield) 
      { 
         String inp=(String) e.arg; 

         out.println(inp); 
         inputfield.setText(""); 
         return true; 
      } 

      return false; 
   } 

   public void say(String msg) 
   { 
      outputarea.appendText("*** "+msg+" ***\n"); 
   } 
}
 

placebo

Mitglied
Deiner Frage nach würde ich darauf tippen, das der Code nicht von dir ist :)
Die Verbindung zum Server wird aufgebaut in Zeile 56. Dort baust du eine Verbindung zu dem Server auf, auf dem auch das Applet liegt (this.getCodeBase().getHost()). Eine andere Möglichkeit hast du nicht, solange das Applet nicht signiert ist, weil dies die VM ohne dem nicht zulässt.

Grüße,
placebo
 

TheDestroyer

Aktives Mitglied
stimmt ist nicht von mir. wollten das nur mal ausprobieren und jetzt halt wissen wo ich die adresse angebe, sprich eine www.-adresse wo sich der server befindet. wenn ich das zum laufen bekommen hab, werd ich mich an meine eigenes applet machen, da, dieses hier etwas anders ist, als meines werden soll.
will halt nur nicht ewig daran sitzen und dann zu dem resultat kommen das ich der der stelle scheitere wo es um die eingabe der url geht.
kann ich jetzt einfach für getHost die adresse angeben, auf welcher sich der server befindet?
dann noch eine frage, wie kann ich einen enter-button einfügen?
 

placebo

Mitglied
Ich werde dir jetzt keine fertige Lösung bringen - ein wenig selber schauen darfst du schon!
Sieh dir mal das an: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Button.html. Das ganze kannst du wie das TextField in deinem Frame ausgeben. Ein bischen mit ActionEvents zu hantieren würde wohl auch nicht schaden.

Viel nützliche Hilfe und Beispiele gibt es hier: http://www.galileocomputing.de/openbook/javainsel6/

Und noch ein Tipp: Versuch die Sachen auf mehrere logische Objekte zu unterteilen, bevor du einfach alles in einem stehen lässt :)

Grüße,
placebo
 

TheDestroyer

Aktives Mitglied
jaja das is mir schon alles klar.

hab hier jetzt mal ein beispielprogramm. allerdinsgs komme ich nicht auf den server. sicherlich weil ich mich nciht richtig einwähle. kann mir einer sagen was ich ändern muss. dies hier ist nur ein bsp.programm auf welches ich mein eigenes aufbauen will. will aber vorher wissen wie ich mich richtig auf den server einwähle.
aber die server-addresse bei getHost angegeben. weiss das man es eigentlich über socket machen soll, allerdings klappt das nicht. Hoffe jemand kann mir hier helfen, bei diesem raltiv kleine problem. die addresse soll ja in zeile 57, kommz das in die Klammer nach get Host, oder ersetze ich get host?

Danke

Code:
package Chat;

import java.net.*; 
import java.io.*; 
import java.awt.*; 
import java.applet.*; 

public class chatapplet extends Applet implements Runnable 
{ 
   public Frame f; 
   public static final int PORT = 63631; 
   public static final String getHost = "isis1.cs.uni-magdeburg.de ";
   Socket socket; 
   DataInputStream in ; 
   PrintStream out; 
   TextField inputfield; 
   TextArea outputarea; 
   Choice choiceChannel; 
        List users;  
   Thread thread; 

   public void init() 
   { 
f = new Frame("Agent159's knuddeliger Chat"); 
f.addWindowListener(new java.awt.event.WindowAdapter() { 
   public void windowClosing(java.awt.event.WindowEvent e) { 
      f.dispose(); 
                     }   }); 

      inputfield = new TextField(); 
      outputarea = new TextArea(); 
                users = new List(); 
      outputarea.setFont( new Font("Dialog", Font.PLAIN, 12)); 
      outputarea.setEditable(false); 
f.add(inputfield); 
f.add(outputarea); 
f.add(users); 
      f.setLayout(new BorderLayout()); 
      f.add("South", inputfield); 
      f.add("Center", outputarea); 
                f.add("East", users); 
      f.setBackground(Color.lightGray); 
      f.setForeground(Color.white); 
      inputfield.setBackground(Color.darkGray); 
      outputarea.setBackground(Color.darkGray); 
      users.setBackground(Color.darkGray); 
f.pack(); 
f.setSize(800,600); 
f.show(); 

} 
   public void start() 
   { 
      try 
      { 
         socket = new Socket(this.getCodeBase().getHost(), PORT); 
         in = new DataInputStream(socket.getInputStream()); 
         out = new PrintStream(socket.getOutputStream()); 
         say("Verbindung zum Server aufgenommen..."); 
      } catch (IOException e) 
      { 
         this.showStatus(e.toString()); 
         say("Verbindung zum Server fehlgeschlagen!"); 
         //System.exit(1); 
      } 

      if (thread == null) 
      { 
         thread = new Thread(this); 
         thread.setPriority(Thread.MIN_PRIORITY); 
         thread.start(); 
      } 
   } 


   public void stop() 
   { 
      try 
      { 
         socket.close(); 
      } catch (IOException e) 
      { 
         this.showStatus(e.toString()); 
      } 

      if ((thread !=null) && thread.isAlive()) 
      { 
         thread.stop(); 
         thread = null; 
      } 
   } 


   public void run() 
   { 
      String line; 

      try 
      { 
         while(true) 
         { 
            line = in.readLine(); 
            if(line!=null) 
               outputarea.appendText(line+'\n' ); 
         } 
      } catch (IOException e) { say("Verbindung zum Server abgebrochen"); } 
   } 
   public boolean action(Event e, Object what) 
   { 
      if (e.target==inputfield) 
      { 
         String inp=(String) e.arg; 

         out.println(inp); 
         inputfield.setText(""); 
         return true; 
      } 

      return false; 
   } 

   public void say(String msg) 
   { 
      outputarea.appendText("*** "+msg+" ***\n"); 
   } 
}
 

placebo

Mitglied
Morgen,
nicht das richtige einwählen ist das Problem, sondern die VM. Du kannst in Applets nur auf den Server zugreifen auf dem auch das Applet liegt. Liegt dein Applet auf localhost, kann dieses auch nur auf einen Server auf localhost zugreifen. Bei xyz.net auf xyz.net, etc.
Wenn du freie Gewalt haben willst, musst du das Applet signieren - gibt fertige Programme die dir JAR dateien signieren. Google ist dein Freund.

Gruß,
placebo
 

TheDestroyer

Aktives Mitglied
konnte es mit Jarkive signieren. Ist denn der Rest an dem Code ok, bringt mir ja nichts es zu signieren, wenn er anschliessend trotzdem nicht auf die seite verbindet, weil ich da noch nen fehler drinnen hab.
 

placebo

Mitglied
Sieht in Ordnung aus.
Teil doch die Klasse einfach ein wenig auf. Wenn du den Frame sowie den Thread in jeweils eine eigene Klasse schiebst, kannst du den Frame auch aus einer main-Methode starten und die ganze Sache als Application laufen lassen.
So kannst du erstmal ohne jegliche Einschränkung testen und debuggen. Vor allem kannst du dann einen Server deiner Wahl angeben.

Gruß,
placebo
 

TheDestroyer

Aktives Mitglied
ja das werde ich dann acuh bei meinem eigenen programm machen. wollte ja jetzt nur wissen, ob ich die adresse an der richtigen stelle angegeben hab.
ach ja hab noch ein anderes problem. benutze eclipse und habe die jar. datei jetzt auch signiert. wie muss ich denn dann weiter vefahren. die sgnierte jar wieder einfügen? so wie ich es jetzt gemacht hab. allerdings ist dann ein ordner namens META-INF vorhanden. mit dem inhalt kann ich allerdings nicht anfangen.
sprich ich hab jetzt eine klasse namens "chatapplet" und halt den META-INF. Vielleicht kannst mir ja nochmal sagen wie es weitergeht, sodass ich mich mit der Seite verbinden kann.
 

TheDestroyer

Aktives Mitglied
bin jetzt nochmal neu rangegangen. hab jetzt ein projekt in welchem sich mehrere Klassen befinden. wenn ich die server klasse starte, kann ich anschliessend den chat auch richtig starten, sprich ich kann lokal den chat auf meinem rechner starten und auch testen. wenn ich jetzt aber die url und PORTS im Chat_Thread.java und Userlsit_Thread ändere, so kann ich zwar den chat noch starten und auch meinen namen eingeben. aber anschliessend kann ich keine nachricht mehr eingeben, was vorher ja noch im local host geklappt hat. Weiss auch nicht ob das an der Liste liegt.

Wäre Super wenn mir jemand helfen kann!!!!

Code:
package chat4;

import java.awt.event.ActionEvent;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.ImageIcon;


class Chat_Thread extends Thread implements Runnable
{
	public static final int PORT = 1313; //63631

	Socket socket;
	static DataInputStream in;
	PrintStream out;
	Thread thread;
	static String name;
	
	static ImageIcon smilie1;
	
	public void start()
	{
		
		try	{
			
			socket = new Socket("localhost",PORT);
                                        //socket = new Socket(InetAddress.getByName("isis1.cs.uni-magdeburg.de"),PORT);

			in = new DataInputStream(socket.getInputStream());
			out = new PrintStream(socket.getOutputStream());
			
		} catch(IOException e) {	
			
			say("Verbindung zum Server fehlgeschlagen!");
			System.exit(1);
			
		}

		say("Verbindung zum Server aufgenommen...");
		say(""+name+" betritt den Chat");	
		
		if(thread == null)
		{
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
			thread.start();
		}
	}
	
	public void run()
	{
		String line;

		try
		{
 

			
			while(true)
			{
				line = in.readLine();
				if(line != null) {
					
					// An dieser Stelle muessen wir die Smilies ersetzen

					//Chatclient.output.append(line+'\n');
					Chatclient.output.setText(Chatclient.output.getText()+line+"\n");
				}			
			}
		} catch(IOException e) {
			say("Verbindung zum Server abgebrochen");
		}
	}

	public void action(ActionEvent evt)	{
		
		if(Chatclient.input.getCaretPosition() > 0) {
		
			SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
			String uhrzeit = sdf.format(new Date());			
			
			out.println("|("+uhrzeit+")("+name+") "+Chatclient.input.getText());
			Chatclient.input.setText("");
			
		}		
	}	

	public void say(String msg)	{
		
		//Chatclient.output.append("*** "+msg+" ***\n");
		Chatclient.output.setText(Chatclient.output.getText()+"*** "+msg+" ***\n");		
	}
}

Code:
package chat4;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;

public class Chatclient extends JFrame {
	
	public static Chat_Thread chat_thread 			= new Chat_Thread();
	public static Userlist_Thread userlist_thread 	= new Userlist_Thread();

	// GUI
	
	static JFrame nameWindow 		= new JFrame("Bitte Namen eingeben");
	static JButton sendName			= new JButton("weiter");
	
	static JTextField nameField		= new JTextField();
	
	static JFrame mainFrame 		= new JFrame("Chat");
	

	static JEditorPane output		= new JEditorPane();


	static JTextField input 		= new JTextField();
	static JList userList			= new JList();
	static JButton senden			= new JButton("senden");
	
	static JPanel mainPanel 		= new JPanel(new BorderLayout());
	static JPanel inputPanel 		= new JPanel(new BorderLayout());
	static JScrollPane outputPanel	= new JScrollPane(output);
	
	static List list				= new List();
	
	static String temp_name 		= "";
	
	final static protected String[] explode(String seperator, String string) {
	       
	       int sep_length = seperator.length();
	       int count = 0;
	       // Wieviel Seperatoren?
	       for(int index = 0; index < string.length() &&  index > -1; index = string.indexOf(seperator, index + sep_length ))
	       count++;
	       
	       // Feld anlegen
	       String[] array = new String[count ];
	       
	       if(count > 0)
	       {
	         // Teilstrings ins Feld schreiben...
	         int i = 0;
	         string = seperator + string;
	         for(int index = 0; index < string.length() && index > -1; index = string.indexOf(seperator, index + sep_length ))
	         {
	           if(string.indexOf(seperator , index + sep_length ) > 0 ) 
	           {
	             array[i] = string.substring(index + sep_length, string.indexOf( seperator, index + sep_length));
	             i++;
	           } 
	           else 
	           {
	             array[i] = string.substring( index + sep_length );
	             i++;
	           }
	         }
	       }
	       // Und Feld zurück geben...
	       return array;
	    }
	
	private static void initGUI() {

		// Komponenten konfigurieren
		
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setSize(new Dimension(400,200));
		
		input.setBorder(new EtchedBorder());
		
		output.setEditable(false);
//		output.setEditorKit(new HTMLEditorKit());
//		output.setContentType("text/html");
//		doc = (HTMLDocument)Chatclient.output.getDocument();

//		output.setLineWrap(true);
//		output.setWrapStyleWord(true);
		
		list.setBackground(Color.gray);
		
		// Listener
		
		input.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt)
			{
				chat_thread.action(evt);
			}
		});
		
		// Komponenten hinzufügen
		
		inputPanel.add("Center", input);
		inputPanel.add("East", senden);
		
		mainPanel.add("Center", outputPanel);
		mainPanel.add("East", list);
		mainPanel.add("South", 	inputPanel);
		
		mainFrame.add(mainPanel);
		
		if(temp_name == "") {
			
			JPanel namePanel 		= new JPanel(new BorderLayout());
			
			Label label1			= new Label("Bitte gib deinen Namen ein:");
			
			nameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			nameWindow.setSize(new Dimension(200,100));
			
			namePanel.add("North", label1);
			namePanel.add("Center", nameField);
			namePanel.add("South", sendName);
			
			nameWindow.add(namePanel);
			
			nameWindow.setVisible(true);
			
			sendName.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent e) {

					temp_name=nameField.getText();
					
					//System.out.println(nameField.getText());
					
					if(temp_name.length()>0) {
						
						for(int i=0;i<temp_name.length();i++) {	
							
							if(temp_name.substring(i,i+1).equals(" ") || temp_name.substring(i,i+1).equals(" ") ) {
								
								temp_name=temp_name.substring(0,i);
								
							}
							
							if(temp_name.equals(""))	{
								
								System.exit(7);
							}
						
						}
						
						Chatclient.chat_thread.name=temp_name;
						Chatclient.chat_thread.start();
						Chatclient.userlist_thread.start();
						
						nameWindow.setVisible(false);			
						mainFrame.setVisible(true);
						
					} else {
						
						System.exit(7);
						
					}			
				}			
			});
		}
	}
	
	public static void main(String[] args) {
		
		initGUI();
		
	}

}

Code:
package chat4;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;

class Connection_Chat extends Thread
{
	protected Socket client;	
	protected DataInputStream in;	
	protected PrintStream out;	
	protected Server_Chat server;
	
	public Connection_Chat(Server_Chat server,Socket client) {
		
		this.server=server;
		this.client=client;		
		
		try	{
			
			in = new DataInputStream(client.getInputStream());
			out = new PrintStream(client.getOutputStream());
			
		} catch(IOException e) {
			
			try { 
				
				client.close(); 
				
			} catch(IOException e2) {
				
			} ;
			
			System.err.println("Fehler beim Erzeugen der Streams: "+e);
			return;
			
		}
		
		this.start();
	}
	
	public void run() {
		
		String line;
		
		try	{
			
			Disconnect_Chat e = new Disconnect_Chat(this);
			
			while(true)	{
				
				line=in.readLine();
				
				if(line!=null) {
					
					server.broadcast(line);
					
				}
				
				if(client.isClosed() || in.readBoolean()==false||out.checkError()) {
					
					this.stop();
					
				}
			
			}
			
		} catch (IOException e)	{
			
			System.out.println("Fehler:"+e);
			
		}
		
	}
	
}

class Disconnect_Chat extends Thread {
	
	Connection_Chat pa;	
	
	public Disconnect_Chat(Connection_Chat parent) {
		
		this.pa=parent;
		this.start();
		
	}
	
	public void run() {
		
		while(true)	{
			
		
			if(pa.isAlive()==false)	{
				
				this.stop();
				
			}
			
			try {
				
				Thread.sleep(2000);
				
			} catch (InterruptedException e) {
				
					e.printStackTrace();
					
			}
		
		}
		
	}
	
}

Code:
package chat4;

import java.net.*;
import java.io.*;
import java.util.*;

class Connection_Userlist extends Thread {
	
	protected Socket client;
	protected DataInputStream in;
	protected PrintStream out;
	protected Server_Userlist server;
	public static Vector members = new  Vector();
	public String name;
	
	public Connection_Userlist(Server_Userlist server,Socket client) {
		
		this.server=server;
		this.client=client;		
		
		try	{
			
			in = new DataInputStream(client.getInputStream());
			out = new PrintStream(client.getOutputStream());
			
		} catch(IOException e) {
			
			try { 
				
				client.close(); 
				
			} catch(IOException e2) {
				
			} ;
			
			System.err.println("Fehler beim Erzeugen der Streams: "+e);
			return;
		}
		
		this.start();
	}
	
	public void run() {
		
		String line;		
		int count=0;
		
		try	{
			
			name=in.readLine();
			members.add(name);
			server.broadcast(members.toString());
			Disconnect_Userlist e = new Disconnect_Userlist(this);
			
			while(true)	{
				
				line=in.readLine();
				
				if(line!=null) {
					
					members.add(line);
					server.broadcast(members.toString());
					
				}
				
				if(client.isClosed() || in.readBoolean()==false||out.checkError()) {
					
					for(int i=0;i<members.size();i++) {
						
						if(members.elementAt(i)== name)	{
							
							members.removeElementAt(i);
							
						}
						
					}
					
					server.broadcast(members.toString());
					this.stop();
					
				}			
			}
		} catch (IOException e)	{
			
			System.out.println("Fehler:"+e);
			
		}

	}
	
}

class Disconnect_Userlist extends Thread
{
	Connection_Userlist pa;
	String name;
	Vector members = new Vector();
	
	public Disconnect_Userlist(Connection_Userlist parent) {
		
		this.pa=parent;
		this.start();
		this.name=parent.name;
		this.members=parent.members;
		
	}
	
	public void run() {
		
		while(true) {			
		
			if(pa.isAlive()==false)	{
				
				for(int i=0;i<Server_Userlist.connections.size();i++) {
					
					if(name==members.elementAt(i)) {
						
						Server_Userlist.connections.removeElementAt(i);
						Connection_Userlist.members.removeElementAt(i);
						
					}
				}
				
				pa.server.broadcast(members.toString());
				this.stop();
				
			}
			
			try {
				
				Thread.sleep(2000);
				
			} catch (InterruptedException e) {
				
					e.printStackTrace();
			}
		
		}
		
	}
	
}

Code:
package chat4;

import java.net.*;
import java.util.*;
import java.io.*;

public class Server_Chat extends Thread implements Runnable {

	public static final int PORT = 1313;
	protected ServerSocket listen;
	static Vector connections;
	Thread connect;	
	
	final static protected String[] explode(String seperator, String string) {
       
       int sep_length = seperator.length();
       int count = 0;
       // Wieviel Seperatoren?
       for(int index = 0; index < string.length() &&  index > -1; index = string.indexOf(seperator, index + sep_length ))
       count++;
       
       // Feld anlegen
       String[] array = new String[count ];
       
       if(count > 0)
       {
         // Teilstrings ins Feld schreiben...
         int i = 0;
         string = seperator + string;
         for(int index = 0; index < string.length() && index > -1; index = string.indexOf(seperator, index + sep_length ))
         {
           if(string.indexOf(seperator , index + sep_length ) > 0 ) 
           {
             array[i] = string.substring(index + sep_length, string.indexOf( seperator, index + sep_length));
             i++;
           } 
           else 
           {
             array[i] = string.substring( index + sep_length );
             i++;
           }
         }
       }
       // Und Feld zurück geben...
       return array;
    }

	public Server_Chat() {
		
		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();
		
	}
	
	public void run() {
		
		try	{
			
			while(true)	{
				
				Socket client=listen.accept();

				Connection_Chat c = new Connection_Chat(this, client);
				connections.addElement(c);
				
			}
			
		} catch(IOException e) {
			
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
			
		}
		
	}
	
	public static void broadcast(String msg) {
		
		int i;
		Connection_Chat you;
		
		for(i=0;i<connections.size();i++) {
			
			you = (Connection_Chat) connections.elementAt(i);
			if(msg.length()> 230) {
				
				msg = msg.substring(0,230);
				
			}
			
			you.out.println(msg);
			
		}
		
	}

	public static void main(String[] args) {
		
		new Server_Chat();
		new Server_Userlist();
		//new Disconnect();
		System.out.println("erstellt");
	
	}

}
Code:
package chat4;

import java.net.*;
import java.io.*;
import java.util.*;

class Server_Userlist implements Runnable 
{
	public static final int PORT = 1314;
	protected ServerSocket listen;
	static Vector connections;
	Thread connect;

	public Server_Userlist() {
		
		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();
		
	}
	
	public void run() {
		
		try	{
			
			while(true)	{
				
				Socket client=listen.accept();
				System.out.println(client);
				Connection_Userlist d = new Connection_Userlist(this, client);
				connections.addElement(d);	
					
			}
		} catch(IOException e) {
			
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
			
		}
	}

	public void broadcast(String msg) {
		
		int i;
		Connection_Userlist you;
		
		for(i=0;i<connections.size();i++) {
			
			you = (Connection_Userlist) connections.elementAt(i);
			
			you.out.println(msg.substring(1,msg.length()-1));
			
		}
		
	}

}

Code:
package chat4;

import java.net.*;
import java.io.*;

class Userlist_Thread extends Thread implements Runnable {
	
	public static final int PORT = 1314; //63631

	Socket socket;
	static DataInputStream in;
	PrintStream out;
	Thread thread;
	
	public void start()	{
		
		try	{
			
			socket = new Socket("localhost",PORT);
                                                //socket = new Socket(InetAddress.getByName("isis1.cs.uni-magdeburg.de"),PORT);

			in = new DataInputStream(socket.getInputStream());
			out = new PrintStream(socket.getOutputStream());
			
		}
		catch(IOException e) {
			
			System.exit(1);
			
		}

		out.println(Chat_Thread.name);
		
		if(thread == null){
			
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
			thread.start();
			
		}
		
	}
	
	public void run() {
		
		String line;
		String[] array = new String[30];
		
		try {
			
			while(true)	{
				
				line= in.readLine();
				if(line != null) {
					
					System.out.println("Userlist_Thread: "+line);
					Chatclient.list.removeAll();	
					array=Chatclient.explode(", ",line);
			
					for(int i=0;i<array.length;i++) {
						
						Chatclient.list.addItem(array[i]);
						
					}
				}			
			}
		} catch(IOException e) {
			
		}
	}
}
[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Chat-Client empfängt nichts vom Server Netzwerkprogrammierung 3
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
AMStyles Client Server basierter Chat Netzwerkprogrammierung 7
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
S RMI Chat Problem, Client bekannt machen Netzwerkprogrammierung 2
S JAV07P SGD client/server chat Netzwerkprogrammierung 4
L Chat Fenster Netzwerkprogrammierung 1
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
S Java Chat Server Netzwerkprogrammierung 8
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
P Chat in Java Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
Androbin Socket Fehlerhafter Applet-Chat Netzwerkprogrammierung 12
C Microsoft Comic Chat Netzwerkprogrammierung 0
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
O Chat (Server) sendet an verschieden Benutzer. Netzwerkprogrammierung 10
J Chat programmieren Netzwerkprogrammierung 12
L Chat Server programmieren Netzwerkprogrammierung 10
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
K chat Netzwerkprogrammierung 13
F RMI einfacher Chat - Callbacks(?) funktionieren nicht Netzwerkprogrammierung 7
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
T Socket Java Chat Netzwerkprogrammierung 2
xDarkSunx Chat JFrame Netzwerkprogrammierung 3
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
E JAVA Chat Netzwerkprogrammierung 19
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
A Multi-User-Chat Netzwerkprogrammierung 2
E Userliste für Chat Applet Netzwerkprogrammierung 4
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
P Socket Chat selbst bauen + Multiusereditor Netzwerkprogrammierung 13
T Java Chat über UDP Netzwerkprogrammierung 7
Developer_X Habe fragen zur Chat Programmierung Netzwerkprogrammierung 4
P Java Multiuser Chat hohe Systemauslastung Netzwerkprogrammierung 24
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
B Die alte Leier: "Chat" Netzwerkprogrammierung 3
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
A Wichtig für einen Chat? Netzwerkprogrammierung 4
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
R Java Chat über Inet connecten Netzwerkprogrammierung 3
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
C Voice Chat Netzwerkprogrammierung 3
G FAQ Chat geht nicht ? Netzwerkprogrammierung 4
T Schriftfarbe im Chat ändern Netzwerkprogrammierung 2
G ActionEvent klappt beim Chat nicht Netzwerkprogrammierung 5
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
T Chat mit mehreren Clients Netzwerkprogrammierung 3
C Chat , Streamproblem, PumpingException, Danke Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
K Lokaler Chat Netzwerkprogrammierung 5
S Chat aufs Internet ausweiten Netzwerkprogrammierung 5
J Router behindert Chat Netzwerkprogrammierung 9
S Knuddels Chat System: Bot / Nachrichten verschicken? Netzwerkprogrammierung 6
G Chat - was brauch ich Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
K Problem mit "Chat" Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
Paule Acces denied bei Chat Netzwerkprogrammierung 6
B Multi-chat Problem Netzwerkprogrammierung 3
N Java Chat-Problem Netzwerkprogrammierung 4
G Java Chat mit HTML Cleint Netzwerkprogrammierung 3
G Chat Programm - was ist los? Netzwerkprogrammierung 9
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
R Mini-Chat löst BindException aus Netzwerkprogrammierung 7
F Multiclient Chat Netzwerkprogrammierung 12
K Chat: Nur 1 Verbindung zum Server möglich :( Netzwerkprogrammierung 6
K Chat: Verbindung kommt nicht zu stande Netzwerkprogrammierung 6
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9
S Einfacher Multiuser chat in java Netzwerkprogrammierung 18
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33

Ähnliche Java Themen

Neue Themen


Oben