G
Guest
Gast
Hallo, ich habe versucht ein kleines Chatprogramm zu schreiben. Mein Problem ist jedoch, dass die Streams meine gesendeten Nachrichten nicht lesen. Z.b. wenn ich in ChatUI (Z.68) die Nachricht sende sollte sie in Connecter (Z.31) gelesen werden.
(Zum Test des Programms: Erst die Chatserver Klasse starten und dann ChatUI über eine kleine html-seite aufrufen). Ich hoffe ihr könnt mir mit meinem Problem helfen. Danke im voraus!
(Zum Test des Programms: Erst die Chatserver Klasse starten und dann ChatUI über eine kleine html-seite aufrufen). Ich hoffe ihr könnt mir mit meinem Problem helfen. Danke im voraus!
Code:
import java.io.*;
import java.net.*;
import java.util.*;
public class Chatserver implements Runnable{
public static final int PORT = 3535;
Socket client;
ServerSocket host;
Thread thread;
Vector<Connecter> connections;
public Chatserver(){
try{
host = new ServerSocket(PORT);
connections = new Vector<Connecter>();
thread = new Thread(this);
thread.start();
}
catch(IOException exc){
System.out.println("error while starting server");
}
}
public void run(){
System.out.println("starting server was successful");
try{
while(true){
System.out.println("waiting for client...");
client = host.accept();
Connecter clientCon = new Connecter(client, this);
connections.add(clientCon);
System.out.println("new client: "+client.toString());
}
}
catch(IOException exc){
System.out.println("server error");
}
}
public void distributeMessage(String message){
for(int i=0; i<connections.size(); i++){
Connecter tempCon = connections.get(i);
tempCon.transmitMessage(message);
}
}
public static void main(String[] args){
Chatserver chatserver = new Chatserver();
}
}
Code:
import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Connecter implements Runnable{
Thread thread;
Socket client;
PrintStream dataOut;
DataInputStream dataIn;
Chatserver chatserver;
public Connecter(Socket client, Chatserver chatserver){
try{
this.client = client;
dataOut = new PrintStream(client.getOutputStream());
dataIn = new DataInputStream(client.getInputStream());
this.chatserver = chatserver;
thread = new Thread(this);
thread.start();
}
catch(IOException exc){
System.out.println("error while initializing client");
}
}
public void run(){
try{
while(true){
String message = dataIn.readLine();
chatserver.distributeMessage(message);
}
}
catch(IOException exc){
System.out.println("error with client");
}
}
public void transmitMessage(String message){
dataOut.println(message);
}
}
Code:
import java.io.*;
import java.net.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatUI extends JApplet implements ActionListener, Runnable{
public static final int PORT = 3535;
JTextArea textArea;
JTextField textField;
JButton sendButton;
JPanel textPanel, messagePanel;
Thread thread;
Socket server;
DataInputStream dataIn;
PrintStream dataOut;
public void init(){
try{
InetAddress address = InetAddress.getLocalHost();
server = new Socket(address, PORT);
dataIn = new DataInputStream(server.getInputStream());
dataOut = new PrintStream(server.getOutputStream());
Container cp = getContentPane();
cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));
textArea = new JTextArea(16, 16);
textArea.setEditable(false);
textArea.setFont(new Font("Sanserif", Font.PLAIN, 12));
textField = new JTextField(20);
sendButton = new JButton("Senden");
sendButton.addActionListener(this);
textPanel = new JPanel();
textPanel.setLayout(new GridLayout(1, 1));
textPanel.add(new JScrollPane(textArea));
messagePanel = new JPanel();
messagePanel.setLayout(new FlowLayout());
messagePanel.add(textField);
messagePanel.add(sendButton);
cp.add(textPanel);
cp.add(messagePanel);
thread = new Thread(this);
thread.start();
}
catch(IOException exc){
System.out.println("failed to build up connection to server");
}
}
public void run(){
textArea.append("*** Connection successful ***");
try{
while(true){
String message = dataIn.readLine();
textArea.append(message);
}
}
catch(IOException exc){
System.out.println("error with server");
}
}
public void actionPerformed(ActionEvent evt){
String cmd = evt.getActionCommand();
if(cmd.equals("Senden")){
dataOut.print(textField.getText());
dataOut.flush();
}
}
}