Guten Tag,
ich habe gestern damit angefangen einen Java Chat zu porgrammieren. Dafür benutze ich ein Applet und eine HTML Datei. Nun habe ich zwei Probleme. Das erste Problem ist, dass mein Programm keine Verbindung zum Server herstellen kann, und ich auch nicht wirklich weiß, wie ich ein Applet debuggen kann. Das zweite Problem ist, dass wenn ich meine HTML Datei zweimal im Browser aufrufe, sodas ich zwei Registerkarten mit dem gleichen Applet habe (Sender und Empfänger), das Programm eine BindException wirft.
ChatServer.java
ConnectionThread.java
ChatAppletForm.java
Vielen Dank im Voraus !
MfG
Hauke
ich habe gestern damit angefangen einen Java Chat zu porgrammieren. Dafür benutze ich ein Applet und eine HTML Datei. Nun habe ich zwei Probleme. Das erste Problem ist, dass mein Programm keine Verbindung zum Server herstellen kann, und ich auch nicht wirklich weiß, wie ich ein Applet debuggen kann. Das zweite Problem ist, dass wenn ich meine HTML Datei zweimal im Browser aufrufe, sodas ich zwei Registerkarten mit dem gleichen Applet habe (Sender und Empfänger), das Programm eine BindException wirft.
ChatServer.java
Java:
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ChatServer implements Runnable {
static int port = 8888;
static String server = "127.0.0.1";
ServerSocket servSock;
ArrayList<ConnectionThread> connections;
Thread connect;
public ChatServer() {
try {
servSock = new ServerSocket(port);
} catch (Exception ex) {
return;
}
connections = new ArrayList<>();
connect = new Thread(this);
connect.start();
}
@Override
public void run() {
try {
while (true) {
Socket client = servSock.accept();
ConnectionThread ct = new ConnectionThread(this, client);
connections.add(ct);
}
} catch (Exception ex) {
}
}
public void broadcast(String message) {
int i;
ConnectionThread user;
for (i = 0; i < connections.size(); i++) {
user = (ConnectionThread) connections.get(i);
try {
user.output.writeUTF(message);
} catch (Exception ex) {
Logger.getLogger(ChatServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public String getActivationMessage() {
return "Der Server wurde erfolgreich konfiguriert.";
}
public static void main(String[] args) {
new ChatServer();
}
}
ConnectionThread.java
Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class ConnectionThread extends Thread {
Socket client;
DataInputStream input;
DataOutputStream output;
ChatServer server;
public ConnectionThread(ChatServer server, Socket client) throws IOException {
this.server = server;
this.client = client;
try {
input = new DataInputStream(client.getInputStream());
output = new DataOutputStream(client.getOutputStream());
} catch (Exception e) {
try {
client.close();
} catch (Exception ex) {
return;
}
}
this.start();
}
@Override
public void run() {
String line;
try {
while (true) {
line = input.readUTF();
if (line != null) {
server.broadcast(line);
}
}
} catch (Exception ex) {
}
}
}
ChatAppletForm.java
Java:
import java.awt.EventQueue;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JApplet;
import javax.swing.UIManager;
public class ChatAppletForm extends JApplet implements Runnable {
int port;
String server;
Socket socket;
DataInputStream input;
DataOutputStream output;
Thread thread;
@Override
public void init() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ChatAppletForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
initComponents();
try {
printMessage(new ChatServer().getActivationMessage());
port = ChatServer.port;
server = ChatServer.server;
} catch (Exception ex) {
printMessage("Fehler beim Konfigurieren des Servers.");
}
}
});
} catch (InterruptedException | InvocationTargetException ex) {
}
}
@SuppressWarnings("unchecked")
private void sendBtnActionPerformed(java.awt.event.ActionEvent evt) {
if (!inputEdit.getText().equals("")) {
String in = inputEdit.getText();
try {
if (output != null) {
output.writeUTF(in);
}
} catch (Exception ex) {
Logger.getLogger(ChatAppletForm.class.getName()).log(Level.SEVERE, null, ex);
}
inputEdit.setText("");
}
}
// Variables declaration - do not modify
private javax.swing.JTextField inputEdit;
private javax.swing.JTextArea outputArea;
private javax.swing.JPanel panel1;
private javax.swing.JScrollPane scrollPane1;
private javax.swing.JButton sendBtn;
// End of variables declaration
@Override
public void start() {
try {
socket = new Socket(server, port);
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
printMessage("Verbindung zum Server hergestellt...");
} catch (Exception ex) {
this.showStatus(ex.toString());
printMessage("Verbindung zum Server fehlgeschlagen.");
return;
}
if (thread == null) {
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}
@Override
public void stop() {
try {
socket.close();
} catch (Exception ex) {
this.showStatus(ex.toString());
}
if ((thread != null) && thread.isAlive()) {
thread.interrupt();
thread = null;
}
}
public void printMessage(String msg) {
outputArea.append("*** " + msg + " ***\n");
}
@Override
public void run() {
String line;
try {
while (true) {
line = input.readUTF();
if (line != null) {
outputArea.append(line + '\n');
}
}
} catch (Exception ex) {
printMessage("Verbindung zum Server abgebrochen.");
}
}
}
Vielen Dank im Voraus !
MfG
Hauke