Socket Fehlerhafter Applet-Chat

Androbin

Bekanntes Mitglied
Hallo Leute,
ich bin gerade dabei ein Chat-Applet zu programmieren :toll:
Jedoch funktioniert es nicht so richtig ;(

Hier mein Code: :popcorn:

package net.diegamingbrueder.chat;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io_OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JApplet;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JApplet implements ActionListener, Runnable {

// Deklarationen

private static final long serialVersionUID = 1L;

Socket client;
OutputStream out;
PrintWriter writer;
InputStream in;
BufferedReader reader;

private JTextArea ChatLog;
private JTextField MessageBox;
private JScrollPane scroll;
private JTextField UserName;

// Konstruktoren

public Client() {

try {

client = new Socket( "localhost", 5832 );

out = client.getOutputStream();
writer = new PrintWriter( out );

in = client.getInputStream();
reader = new BufferedReader( new InputStreamReader( in ) );

} catch ( UnknownHostException e ) { e.printStackTrace(); }
catch ( IOException e ) { e.printStackTrace(); }

setPreferredSize( new Dimension( 500, 500 ) );

setLayout( null );

ChatLog = new JTextArea();
ChatLog.setAutoscrolls( true );
ChatLog.setBounds( 10, 10, 480, 440 );
ChatLog.setLineWrap( true );
ChatLog.setWrapStyleWord( true );

scroll = new JScrollPane();
scroll.setAutoscrolls( true );
scroll.setBounds( 10, 10, 480, 440 );
scroll.setViewportView( ChatLog );
add( scroll );

MessageBox = new JTextField( "Hallo" );
MessageBox.addActionListener( this );
MessageBox.setBounds( 120, 460, 370, 30 );
MessageBox.setHorizontalAlignment( JTextField.CENTER );
add( MessageBox );

UserName = new JTextField( "User" );
UserName.setBounds( 10, 460, 100, 30 );
UserName.setHorizontalAlignment( JTextField.CENTER );
add( UserName );

setVisible( true );

}

// Methoden

public void start() { new Thread( new Client() ).start(); }

@ Override
public void actionPerformed( ActionEvent e ) { if ( e.getSource().equals( MessageBox ) ) { writer.write( UserName.getText() + ": " + MessageBox.getText() + "\n" ); writer.flush(); } }

@ Override
public void run() {

try {

while( true ) {

String s = null;

while ( ( s = reader.readLine() ) != null ) { ChatLog.setText( ChatLog.getText() + "\n" + s + "\n" ); }

}

} catch ( UnknownHostException e ) { e.printStackTrace(); }
catch ( IOException e ) { e.printStackTrace(); }

}

}
package net.diegamingbrueder.chat;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {

// Deklarationen

private static ArrayList<PrintWriter> clientwriter = new ArrayList<PrintWriter>();

// Methoden

@ SuppressWarnings( "resource" )
public static void main( String[] args ) {

ServerSocket server = null;
ExecutorService executor = Executors.newFixedThreadPool( 20 );

try {

server = new ServerSocket( 5832 );

while ( true ) {

try {

Socket client = server.accept();
clientwriter.add( new PrintWriter( client.getOutputStream() ) );
executor.execute( new Handler( client ) );

} catch ( IOException e ) { e.printStackTrace(); }

}

} catch ( IOException e ) { e.printStackTrace(); }

}

public static void distributeMessage( String message ) { for ( int i = 0; i < clientwriter.size(); i++ ) { clientwriter.get( i ).write( message ); clientwriter.get( i ).flush(); } }

}
package net.diegamingbrueder.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Handler implements Runnable {

// Deklarationen

private Socket client;

// Konstruktoren

public Handler( Socket client ) { this.client = client; }

// Methoden

@ Override
public void run() {


try {

InputStream in = client.getInputStream();
BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );

String s = null;

while ( ( s = reader.readLine() ) != null ) { Server.distributeMessage( s + "\n" ); }

} catch ( IOException e ) { e.printStackTrace(); }

}

}
Hat vielleicht jemand von euch eine Lösung parat :idea:
 

Androbin

Bekanntes Mitglied
:mad:: fischefr 8 Tschuldigung :oops:
Es ist eigentlich recht offensichtlich 8
Er funktioniert ÜBERHAUPT NICHT !!!
Genauer gesagt, passiert nichts, wenn man(n) (/frau)
versuchen, eine Message los zu schicken :(
 

Tobse

Top Contributor
Wir hatten das Thema schonmal.

1. Ausrufezeichen sind keine Rudeltiere und sie verursachen bei uns auch nicht den Wunsch, dir noch mehr zu helfen als wir es sonst schon würden.

2. "Es tut nicht" ist keine Fehlerbeschreibung.

Dein Code ist hier völlig unformatiert; den will so keiner lesen. Poste den Code bitte nochmal mit
Java:
 tags und dazu bitte die StackTrace einer Exception (wenn eine geworfen wird).
An sonsten kannst du ja mal den Debugger ausprobieren.
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
Hier nochmal der Code:

Java:
package net.diegamingbrueder.chat;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JApplet;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JApplet implements ActionListener, Runnable {
	
	// Deklarationen
	
    private static final long serialVersionUID = 1L;
    
    Socket client;
    OutputStream out;
    PrintWriter writer;
    InputStream in;
    BufferedReader reader;
    
    private JTextArea ChatLog;
    private JTextField MessageBox;
    private JScrollPane scroll;
    private JTextField UserName;
	
    // Konstruktoren
    
    public Client() {
    	
        try {
        	
	        client = new Socket( "localhost", 5832 );
	        
	        out = client.getOutputStream();
	        writer = new PrintWriter( out );
	        
	        in = client.getInputStream();
	        reader = new BufferedReader( new InputStreamReader( in ) );
	        
        } catch ( UnknownHostException e ) { e.printStackTrace(); }
        catch ( IOException e ) { e.printStackTrace(); }
        
    	setPreferredSize( new Dimension( 500, 500 ) );
    	
    	setLayout( null );
    	
    	ChatLog = new JTextArea();
    	ChatLog.setAutoscrolls( true );
    	ChatLog.setBounds( 10, 10, 480, 440 );
    	ChatLog.setLineWrap( true );
    	ChatLog.setWrapStyleWord( true );
    	
    	scroll = new JScrollPane();
    	scroll.setAutoscrolls( true );
    	scroll.setBounds( 10, 10, 480, 440 );
    	scroll.setViewportView( ChatLog );
    	add( scroll );
    	
    	MessageBox = new JTextField( "Hallo" );
    	MessageBox.addActionListener( this );
    	MessageBox.setBounds( 120, 460, 370, 30 );
    	MessageBox.setHorizontalAlignment( JTextField.CENTER );
    	add( MessageBox );
    	
    	UserName = new JTextField( "User" );
    	UserName.setBounds( 10, 460, 100, 30 );
    	UserName.setHorizontalAlignment( JTextField.CENTER );
    	add( UserName );
    	
    	setVisible( true );
    	
    }
    
	// Methoden
	
    public void start() { new Thread( new Client() ).start(); }
    
	@ Override
    public void actionPerformed( ActionEvent e ) { if ( e.getSource().equals( MessageBox ) ) { writer.write( UserName.getText() + ": " + MessageBox.getText() + "\n" ); writer.flush(); } }
    
    @ Override
    public void run() {
		
		try {
	        
	        while( true ) {
	        	
	        	String s = null;
	        	
	        	while ( ( s = reader.readLine() ) != null ) { ChatLog.setText( ChatLog.getText() + "\n" + s + "\n" ); }
	        	
	        }
	        
        } catch ( UnknownHostException e ) { e.printStackTrace(); }
		catch ( IOException e ) { e.printStackTrace(); }
		
	}
	
}
Java:
package net.diegamingbrueder.chat;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {
	
	// Deklarationen
	
	private static ArrayList<PrintWriter> clientwriter = new ArrayList<PrintWriter>();
	
	// Methoden
	
    @ SuppressWarnings( "resource" )
    public static void main( String[] args ) {
		
		ServerSocket server = null;
		ExecutorService executor = Executors.newFixedThreadPool( 20 );
		
		try {
			
			server = new ServerSocket( 5832 );
			
			while ( true ) {
				
				try {
					
					Socket client = server.accept();
					clientwriter.add( new PrintWriter( client.getOutputStream() ) );
					executor.execute( new Handler( client ) );
					
				} catch ( IOException e ) { e.printStackTrace(); }
				
			}
			
		} catch ( IOException e ) { e.printStackTrace(); }
		
	}
	
	public static void distributeMessage( String message ) { for ( int i = 0; i < clientwriter.size(); i++ ) { clientwriter.get( i ).write( message ); clientwriter.get( i ).flush(); } }
	
}
Java:
package net.diegamingbrueder.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Handler implements Runnable {
	
	// Deklarationen
	
	private Socket client;
	
	// Konstruktoren
	
	public Handler( Socket client ) { this.client = client; }
	
	// Methoden
	
    @ Override
    public void run() {
		
        
        try {
	        
	        InputStream in = client.getInputStream();
	        BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
	        
	        String s = null;
	        
	        while ( ( s = reader.readLine() ) != null ) { Server.distributeMessage( s + "\n" ); }
	        
        } catch ( IOException e ) { e.printStackTrace(); }
        
    }
	
}
 

Joose

Top Contributor
Jetzt fehlt nur noch eine genauere Beschreibung des Problems.
Was genau geht nicht? Passiert gar nicht? Kann der Client etwas abschicken es kommt aber nichts an?
Fliegt eine Exception? Wenn ja, welche inkl StackTrace.
usw.
 

Joose

Top Contributor
Hast du den Debugger schon verwendet um zu sehen wo er "hängen" bleibt?

Füge Konsolenausgabe bzw. Logausgaben hinzu, dann siehst du was in deinem Programm wirklich passiert. So kannst du unter anderem auch den Fehler finden.
 

Anti-Banane

Gesperrter Benutzer
erstens : CONVENTIONS ! aber ganz schnell ... SO macht das lesen/verstehen weder spaß noch ist einfach

kurzform :
Klassen - UpperCamelCase
methoden/variable - lowerCamelCase

wenn ich so in den Code gucke sind ChatLog, MessageBox und UserName für mich erstmal klassen ... nur weil ich oben die deklaration gesehen habe und aus erfahrung weis : so wie du es verwendest können es nur member sein ... weis ich das es variablen-namen und keine klassen sind > DRINGENDS ändern !


zweitens : musstest du deinen Listener echt in eine zeile drücken ? ... lesbarkeit gleich null
trifft übrigens auch auf anderen stellen zu
schreib es ruhig ausführlich ... nur weil es "eine anweisung" ist muss man es nicht zusammendrücken ... wie gesagt : lesbarkeit gleich null ... solltest du auch ändern

ich zieh es mal auseinander

Java:
public void actionPerformed(ActionEvent e)
{
	if(e.getSource().equals(MessageBox))
	{
		writer.write(UserName.getText()+": "+MessageBox.getText()+"\n");
		writer.flush();
	}
}

gut ... wie siehts aus mit nem debugger ? wird der listener überhaupt ausgeführt ?
was genau meinst du mit "es passiert einfach nichts" ... wird das event ausgelöst ? wenn ja : passiert das gewollte ergebnis ?

tipp : für den JTextArea.setText(JTextArea.getText()+"krams") gibt es was besseres : JTextArea.append("krams")


kontrollier mit einem sniffer wie WireShark ob die pakete überhaupt versand werden ... ob also auch wirklich ein datenaustausch zwischen client und server stattfindet

auch ist dein broadcast mit dem static sehr fragwürdig ... [STRIKE]mal davon abgesehen das das SO auch nicht compilen würde da die entsprechende IOException die bei PrintWriter.write() fliegen kann nirgends abgefangen wird[/STRIKE]
// EDIT
ok .. ich hab mal eben in die DOC geguckt ... PrintWriter würde ich SO aber mal niemals verwenden ...
[...]because it must suppress I/O exceptions.
WAT ? eine I/O-Klasse die absichtlich IOExceptions unterdrückt/verschluckt ?
mal sowas von mega-schlechtes design > NICHT NUTZEN !
weil ich wette mit dir das da auch noch irgendwas fliegt was du aber nicht mitbekommst da es wie in der doc nach zu lesen unterdrückt wird



so .. und jetzt bist du dran



// EDIT
hier mal halbwegs sauberer funktionierender code

Java:
import java.io.*;
import java.net.*;
import java.util.*;
public class Server
{
	private ServerSocket serverSocket=null;
	private ArrayList<ClientRunnable> clients=null;
	private static Server server=null;
	public static void main(String[] args)
	{
		System.out.println("start-up chat-server");
		server=new Server();
		server.startup();
		System.out.println("start-up complete");
	}
	private Server()
	{
		System.out.print("try to create ServerSocket ... ");
		try
		{
			serverSocket=new ServerSocket(12345);
		}
		catch(Exception e)
		{
			System.out.println("failed to create ServerSocket");
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("ok");
		clients=new ArrayList<ClientRunnable>();
	}
	private void startup()
	{
		System.out.print("setting up accept-thread ... ");
		Thread thread=new Thread(new Runnable()
		{
			public void run()
			{
				while(true)
				{
					try
					{
						Socket client=serverSocket.accept();
						ClientRunnable clientRunnable=new ClientRunnable(server, client);
						(new Thread(clientRunnable)).start();
						clients.add(clientRunnable);
					}
					catch(Exception e)
					{
						System.out.println("failed to accept client");
						e.printStackTrace();
					}
				}
			}
		});
		System.out.println("ok");
		System.out.println("starting accept-thread");
		thread.start();
	}
	protected void broadcast(String msg)
	{
		for(ClientRunnable client : clients)
		{
			client.send(msg);
		}
	}
	protected void disconnect(ClientRunnable client)
	{
		clients.remove(client);
	}
}
Java:
import java.io.*;
import java.net.*;
class ClientRunnable implements Runnable
{
	private Server server=null;
	private Socket socket=null;
	private BufferedReader in=null;
	private PrintStream out=null;
	protected ClientRunnable(Server server, Socket socket)
	{
		this.server=server;
		this.socket=socket;
	}
	public void run()
	{
		try
		{
			in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out=new PrintStream(socket.getOutputStream());
		}
		catch(Exception e)
		{
			System.out.println("cant get client-streams");
			e.printStackTrace();
			return;
		}
		String line="";
		while(true)
		{
			try
			{
				line=in.readLine();
				if(line==null)
				{
					break;
				}
				if(line.equals(""))
				{
					continue;
				}
				if(line.equals("DC"))
				{
					System.out.println("DC DETECTED");
					break;
				}
				server.broadcast(line);
			}
			catch(Exception e)
			{
				System.out.println("failed to read message");
				e.printStackTrace();
			}
		}
		try
		{
			in.close();
			out.close();
			socket.close();
		}
		catch(Exception e)
		{
			System.out.println("cant close streams/socket");
			e.printStackTrace();
		}
		server.disconnect(this);
	}
	protected void send(String msg)
	{
		try
		{
			out.println(msg);
			out.flush();
		}
		catch(Exception e)
		{
			System.out.println("cant send message");
			e.printStackTrace();
		}
	}
}
Java:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ClientApplet extends JApplet
{
	private Socket socket=null;
	private BufferedReader in=null;
	private PrintStream out=null;
	private JTextField jTextField=null;
	private JTextArea jTextArea=null;
	public ClientApplet()
	{
		setLayout(new BorderLayout());
		setBackground(Color.LIGHT_GRAY);
		setForeground(Color.BLACK);
	}
	public void init()
	{
		jTextField=new JTextField();
		jTextField.setBackground(Color.WHITE);
		jTextField.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				try
				{
					String msg=jTextField.getText();
					if(!msg.equalsIgnoreCase("DC"))
					{
						out.println(msg);
						out.flush();
					}
					jTextField.setText("");
				}
				catch(Exception ex)
				{
					jTextArea.append(ex.toString()+"\n");
				}
			}
		});
		jTextArea=new JTextArea();
		jTextArea.setBackground(Color.WHITE);
		jTextArea.setEditable(false);
		this.add("South", jTextField);
		this.add("Center", jTextArea);
	}
	public void start()
	{
		try
		{
			socket=new Socket(this.getCodeBase().getHost(), 12345);
			in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out=new PrintStream(socket.getOutputStream());
		}
		catch(Exception e)
		{
			jTextArea.append(e.toString()+"\n");
			jTextArea.append("cant connect to server");
			return;
		}
		jTextArea.append("connected\n");
		(new Thread(new Runnable()
		{
			public void run()
			{
				String line="";
				while(true)
				{
					try
					{
						line=in.readLine();
						if(line==null)
						{
							break;
						}
						if(line.equals(""))
						{
							continue;
						}
						jTextArea.append(line+"\n");
					}
					catch(Exception e)
					{
						jTextArea.append(e.toString()+"\n");
					}
				}
				jTextArea.append("ERROR");
				try
				{
					in.close();
					out.close();
					socket.close();
				}
				catch(Exception e)
				{
					jTextArea.append(e.toString()+"\n");
				}
				return;
			}
		})).start();
	}
	public void stop()
	{
	}
	public void destroy()
	{
		try
		{
			out.println("DC");
			in.close();
			out.close();
			socket.close();
		}
		catch(Exception e)
		{
			jTextArea.append(e.toString()+"\n");
		}
	}
}
ja ich weis ... auch dieser code ist ziemlicher schrott ... aber ich hab ihn mal irgendwann bei nem ähnlichen thema einfach frei-hand ausm kopf geschrieben ... für schönheit war einfach keine lust da
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
Hier meine Variante von Anti-Banane's Code 8

Java:
// Package

package net.diegamingbrueder.chat;

// Imports

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// Klassen

public class ClientApplet extends JApplet {
	
	// Deklarationen
	
	private static final long serialVersionUID = 1L;
	
    private Socket socket;
    private BufferedReader in;
    private PrintStream out;
    private JTextField jTextField;
    private JTextArea jTextArea;
    
    // Konstruktoren
    
    public ClientApplet() {
    	
        setLayout( new BorderLayout() );
        
        setBackground( Color.LIGHT_GRAY );
        setForeground( Color.BLACK );
        
    }
    
    // Methoden
    
    public void init() {
    	
        jTextField = new JTextField();
        jTextField.setBackground( Color.WHITE );
        jTextField.addActionListener( new ActionListener() {
        	
            public void actionPerformed( ActionEvent e ) {
            	
                try {
                	
                    String msg = jTextField.getText();
                    
                    if ( !msg.equalsIgnoreCase( "DC" ) ) {
                    	
                        out.println( msg );
                        out.flush();
                        
                    }
                    
                    jTextField.setText( "" );
                    
                } catch ( Exception ex ) {
                    jTextArea.append( ex.toString() + "\n" ); }
                
            }
            
        } );
        
        jTextArea = new JTextArea();
        jTextArea.setBackground( Color.WHITE );
        jTextArea.setEditable( false );
        
        add( "South" , jTextField );
        add( "Center", jTextArea  );
        
    }
    
    public void start() {
    	
        try {
        	
            socket = new Socket( getCodeBase().getHost(), 12345 );
            in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
            out = new PrintStream( socket.getOutputStream() );
            
        } catch ( Exception e ) {
        	
            jTextArea.append( e.toString() + "\n" );
            jTextArea.append( "cant connect to server" );
            
            return;
            
        }
        
        jTextArea.append( "connected\n" );
        
        new Thread( new Runnable() {
        	
        	@ Override
            public void run() {
        		
                String line="";
                while ( true ) {
                	
                    try {
                    	
                        line = in.readLine();
                        if ( line == null    ) break;
                        if ( line.equals( "" ) ) continue;
                        
                        jTextArea.append( line + "\n" );
                        
                    } catch ( Exception e ) {
                        jTextArea.append( e.toString() + "\n" ); }
                    
                }
                
                jTextArea.append( "ERROR" );
                
                try {
                	
                    in    .close();
                    out   .close();
                    socket.close();
                    
                } catch ( Exception e ) {
                	jTextArea.append( e.toString() + "\n" ); }
                
                return;
            }
        	
        } ).start();
    }
    
    public void stop() { }
    
    public void destroy() {
    	
        try {
        	
            out.println( "DC" );
            
            in    .close();
            out   .close();
            socket.close();
            
        } catch ( Exception e ) {
            jTextArea.append( e.toString() + "\n" ); }
        
    }
    
}
Java:
// Package

package net.diegamingbrueder.chat;

// Imports

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

// Klassen

class ClientRunnable implements Runnable {
	
	// Deklarationen
	
    private Server server;
    private Socket socket;
    private BufferedReader in;
    private PrintStream out;
    
    // Konstruktoren
    
    protected ClientRunnable( Server server, Socket socket ) {
    	
        this.server=server;
        this.socket=socket;
        
    }
    
    // Methoden
    
    public void run() {
    	
        try {
        	
            in  = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
            out = new PrintStream( socket.getOutputStream() );
            
        } catch( Exception e ) {
        	
            System.out.println( "cant get client-streams" );
            e.printStackTrace();
            
            return;
        }
        
        String line="";
        
        while ( true ) {
        	
            try {
            	
                line=in.readLine();
                
                if ( line==null) break;
                if ( line.equals(  ""  ) ) continue;
                if ( line.equals( "DC" ) ) {
                	
                    System.out.println( "DC DETECTED" );
                    break;
                    
                }
                
                server.broadcast( line );
                
            } catch ( Exception e ) {
            	
                System.out.println( "failed to read message" );
                e.printStackTrace();
                
            }
            
        }
        
        try {
        	
            in    .close();
            out   .close();
            socket.close();
            
        } catch ( Exception e ) {
        	
            System.out.println( "cant close streams/socket" );
            e.printStackTrace();
            
        }
        
        server.disconnect( this );
        
    }
    
    protected void send( String msg ) {
    	
        try {
        	
            out.println( msg );
            out.flush();
            
        } catch ( Exception e ) {
        	
            System.out.println( "cant send message" );
            e.printStackTrace();
            
        }
        
    }
    
}
Java:
// Package

package net.diegamingbrueder.chat;

// Imports

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

// Klassen

public class Server {
	
	// Deklarationen
	
    private ServerSocket serverSocket;
    private ArrayList<ClientRunnable> clients;
    private static Server server;
    
    // Konstruktoren
    
    private Server() {
    	
        System.out.print( "try to create ServerSocket ... " );
        
        try { serverSocket = new ServerSocket( 12345 ); }
        catch ( Exception e ) {
        	
            System.out.println( "failed to create ServerSocket" );
            e.printStackTrace();
            System.exit( 1 );
            
        }
        
        System.out.println( "ok" );
        clients = new ArrayList<ClientRunnable>();
        
    }
    
    // Methoden
    
    public static void main( String[] args ) {
    	
        System.out.println( "start-up chat-server" );
        
        server = new Server();
        server.startup();
        
        System.out.println( "start-up complete" );
        
    }
    
    private void startup() {
    	
        System.out.print( "setting up accept-thread ... " );
        
        Thread thread = new Thread( new Runnable() {
        	
        	@ Override
            public void run() {
        		
                while ( true ) {
                	
                    try {
                    	
                        Socket client = serverSocket.accept();
                        
                        ClientRunnable clientRunnable = new ClientRunnable( server, client );
                        new Thread (   clientRunnable ).start();
                        clients.add(   clientRunnable );
                        
                    } catch ( Exception e ) {
                    	
                        System.out.println( "failed to accept client" );
                        e.printStackTrace();
                        
                    }
                    
                }
                
            }
        	
        } );
        
        System.out.println( "ok" );
        System.out.println( "starting accept-thread" );
        
        thread.start();
        
    }
    
    protected void broadcast( String msg ) {
    	
        for ( ClientRunnable client : clients )
        	client.send( msg );
        
    }
    
    protected void disconnect( ClientRunnable client ) {
    	
        clients.remove( client );
        
    }
    
}
Formatierung ok?
 

Anti-Banane

Gesperrter Benutzer
warum bin ich voll***** eigentlich immer wieder so naiv und würde glauben das anfänger wie du vom code lernen würden statt diesen einfach nur zu kopieren ... sollte ich mir merken

zur formatierung : bisschen viele leerzeichen / -zeilen drin
du sparst hier echt an der falschen stelle
du drückst methoden die man halt eben lieber zeile für zeile schreibt in eine zeile ... und ballerst dafür lieber alles mit leerzeichen voll "das alles schön unter ein ander steht"

Java:
                try {
                	
                    in    .close();
                    out   .close();
                    socket.close();
                    
                } catch ( Exception e )
Java:
                        Socket client = serverSocket.accept();
                        
                        ClientRunnable clientRunnable = new ClientRunnable( server, client );
                        new Thread (   clientRunnable ).start();
                        clients.add(   clientRunnable );
sowas macht man nicht ... das verschlechtert extrem den lesefluss und verschlechtert damit die lesbarkeit
das wurde dir aber schon mehrfach angeraten
und wie ich auch schrieb : CONVENTIONS !

Blanks : Code Conventions for the Java Programming Language: 8. White Space
Namings : Code Conventions for the Java Programming Language: 9. Naming Conventions

die solltest du dir verinnerlichen um das leben mit anderen programmieren deutlich zu vereinfachen

sicher ... deinen code "kann" man noch lesen .. auch wenn die übermäßigen blanks echt überflüssig störend sind ... aber was machst du mit unseren codes wenn du mal eben keinen editor zum re-formatieren hast ? einfach rumflennen nach dem motto : das is mir zu unsauber formatiert ?
dann ist das schlicht dein pech ... gewöhn dir lieber gleich "den richtigen" stil an

(ja, dank conventions gibt es in java "den richtigen stil")



auch sind deine kommentare mal völlig überflüssig
man sieht das du einen block mit variablen-deklaration hast, einen mit konstruktoren und dann die methoden folgen, das muss man nicht noch als kommentar dran schreiben



alles in allem ist es code-klau ... und dabei noch ziemlich versaut durch deine recht merkwürdige formatierung und überflüssigen kommentare

das der code nicht das gelbe vom ei ist weis ich auch, aber er sollte dir auch nur einen anhalt geben wie eine mögliche implementierung aussehen könnte und wie ein chat im groben funktioniert
das du einfach deinen code wegwirfst und nicht mal auf den grund gehst warum er denn nicht funktioniert hat und stattdessen copy'n'paste machst ... das wird nicht weiterhelfen da du beim nächsten probleme dann gleich wieder hier fragen wirst : "geht nicht" ... und gucken ob dann noch mal jemand so naiv ist und die fertigen code postet

SO lernst du nichts ... such dir n anderes hobb
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Datei schreiben über Applet Netzwerkprogrammierung 8
N Applet/Applikation auf Xport laufen lassen Netzwerkprogrammierung 10
N Applet Access Denied Netzwerkprogrammierung 12
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
H Applet soll XML-File auf Server speichern Netzwerkprogrammierung 6
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
B FTP Applet mit FTP-Server-Zugriff sicher gestalten Netzwerkprogrammierung 12
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
O php - applet Kommunikation Netzwerkprogrammierung 9
B Client Server Applet keine Ahnung Netzwerkprogrammierung 3
R Applet --> PHP --> Applet Netzwerkprogrammierung 2
E Userliste für Chat Applet Netzwerkprogrammierung 4
B RTP - Applet Starthilfe Netzwerkprogrammierung 7
B Globale IP-Adresse auslesen - Java Applet Netzwerkprogrammierung 2
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
J Applet Security - java.security.AccessControlException: access denied Netzwerkprogrammierung 3
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
E Files von Server laden in Applet Netzwerkprogrammierung 5
aze Applet von Webseite aufrufen und mit diesem kommunizieren Netzwerkprogrammierung 8
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
U Server-IP in Applet ermitteln Netzwerkprogrammierung 4
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
ABstraCT Applet multipler port Zugriff möglich ? Netzwerkprogrammierung 5
C Applet mit Script steuern Netzwerkprogrammierung 9
A Problem mit Netzwerkprogrammierung im Applet! Netzwerkprogrammierung 10
F applet verbindung zum server Netzwerkprogrammierung 6
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
F Applet Datei Zugriff Netzwerkprogrammierung 13
M Server aus inem Applet heraus starten Netzwerkprogrammierung 4
G Applet und Netzwerkverbindungen? Netzwerkprogrammierung 2
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
K Datenaustausch zwischen Applet und JSP Netzwerkprogrammierung 4
E Applet zum Datei-Upload Netzwerkprogrammierung 3
T Image aus Applet an PHP Seite senden? Netzwerkprogrammierung 3
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
H RMI + Socket + Applet Netzwerkprogrammierung 5
N Chatprogrammierung - Applet Netzwerkprogrammierung 3
S Von Applet zu applet Netzwerkprogrammierung 7
G RMI + Applet - Verbindung nur lokal Netzwerkprogrammierung 27
S Applet und JWS auf Apache-Axis (SOAP) Netzwerkprogrammierung 8
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
G Applet java.net: acces denied Netzwerkprogrammierung 2
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
R Applet & Netzwerk Netzwerkprogrammierung 4
M Servlet - Applet Kommunikation Netzwerkprogrammierung 3
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
R applet servlet kommunikation Netzwerkprogrammierung 2
M Zum x-ten Mal: Problem mit NetSend-Applet Netzwerkprogrammierung 5
C Applet <> Servlet Netzwerkprogrammierung 4
H Socket Chat entwickeln mit Java Server Client 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
D Chat Server/mehre Client Netzwerkprogrammierung 9
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
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
I Chat-Client empfängt nichts vom Server Netzwerkprogrammierung 3
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
A Multi-User-Chat Netzwerkprogrammierung 2
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
AMStyles Client Server basierter Chat Netzwerkprogrammierung 7
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
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
A Wichtig für einen Chat? Netzwerkprogrammierung 4
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
T Chat-Client Netzwerkprogrammierung 12

Ähnliche Java Themen

Neue Themen


Oben