Hallo Leute,
ich bin gerade dabei ein Chat-Applet zu programmieren :toll:
Jedoch funktioniert es nicht so richtig ;(
Hier mein Code: opcorn:
Hat vielleicht jemand von euch eine Lösung parat :idea:
ich bin gerade dabei ein Chat-Applet zu programmieren :toll:
Jedoch funktioniert es nicht so richtig ;(
Hier mein Code: opcorn:
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.iutputStream;
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(); }
}
}
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.iutputStream;
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(); } }
}
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(); }
}
}
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(); }
}
}