Problem mit "Chat"

Status
Nicht offen für weitere Antworten.

KSG9|sebastian

Top Contributor
Hi Leute..


ich hab grad versucht nen kleinen Chat zu proggen. Ich kann mit dem Client auch connecten und 1x was schicken. Aber dann nicht mehr. Ich krieg keine Exception, gar nix, aber im Client-Thread geht glaub ich was schief.
Auserdem wird das Programm nicht sauber beendet...bzw. gar nicht beendet ich muss es imm über Eclipse "terminaten"

Code;

Server

Code:
package de.fiducia.server;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

public class Server extends JFrame implements Runnable {
	private int port = 80;

	private ServerSocket serverSock;

	private JSplitPane pane;
	
	private Vector clients;

	private JList cls;

	private JTextArea traffic;

	private Thread t;

	public final String CN_HELLO = "hello";

	public Server() {
		super("Server");
		super.setBounds(20, 20, 450, 250);

		clients = new Vector();
		traffic = new JTextArea();
		cls = new JList(clients);

		traffic.setBorder(new TitledBorder(new LineBorder(Color.black), "Traffic"));
		cls.setBorder(new TitledBorder(new LineBorder(Color.black), "Clients"));
		super.addWindowListener(new WindowAdapter() {
			public void windowClosed(WindowEvent arg0) {
				shutdownClients();
				close();
				dispose();
			}
		});

		//super.getContentPane().add(traffic, BorderLayout.CENTER);
		//super.getContentPane().add(cls, BorderLayout.EAST);
			
		pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(traffic), cls);
		pane.setDividerLocation(320);
		
		super.getContentPane().setLayout(new GridLayout(1, 1));
		super.getContentPane().add(pane);
		
		
		super.setVisible(true);
		try {
			serverSock = new ServerSocket(port);
			traffic.append("ServerSocket opened on port " + port + "...\n");
			traffic.append("ServerSocket is waiting for connections...\n");
		} catch (IOException e) {
			shutdownClients();
			e.printStackTrace();
		}
		t = new Thread(this);
		t.start();
	}
	private void close(){
		t.interrupt();
	}
	private void shutdownClients() {
		t.interrupt();
		for (int i = 0; i < clients.size(); i++) {
			if(clients.get(i) != null)
				((ServerUser) clients.get(i)).close();
		}
	}

	public static void main(String[] args) {

	}

	public void append(String text) {
		traffic.append(text + "\n");
	}

	private void initiateConnection(Socket s) {
		traffic.append("Client connected from "
				+ s.getInetAddress().getHostAddress() + "\n");
		PrintWriter writer = null;
		BufferedReader reader = null;
		try {
			writer = new PrintWriter(s.getOutputStream());
			reader = new BufferedReader(new InputStreamReader(s
					.getInputStream()));
			writer.println(CN_HELLO);
			writer.flush();
			String name = reader.readLine();
			if (null == name || name.trim().toLowerCase().equals("")) {
				traffic.append("Error\n");
			} else {
				ServerUser user = new ServerUser(this, s, name);
				clients.add(user);
				traffic.append("Client " + name + " added...\n");
				cls.setListData(clients);
			}

		} catch (IOException e) {
			traffic.append("Error " + s.getInetAddress().getHostAddress()
					+ "\n");
		}
	}

	public void run() {

		while (true) {
			try {
				while (!t.isInterrupted()) {
					Socket s = serverSock.accept();
					initiateConnection(s);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}

	public void broadcast(String text) {
		for (int i = 0; i < clients.size(); i++) {
			ServerUser u = (ServerUser) clients.get(i);
			u.print(text);
		}
	}
}

Client

Code:
package de.fiducia.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import de.fiducia.jitc.JustInTimeCompiler;

public class Client extends Thread {
	private int port = 80;

	private String host = "10.2.184.42";

	private Socket socket;

	private JustInTimeCompiler jitc;

	private BufferedReader reader = null;

	private PrintWriter writer = null;

	public final String CN_HELLO = "hello";

	public Client() {
		// jitc = new JustInTimeCompiler();
		connect();
		this.start();
	}

	private void connect() {
		try {
			socket = new Socket(host, port);

			reader = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			writer = new PrintWriter(socket.getOutputStream());

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

	public void run() {

		while (true) {
			String line = "";
			try {
				line = reader.readLine();
			} catch (IOException e) {
				close();
				e.printStackTrace();
			}
			if (CN_HELLO.equals(line)) {
				writer.println("Sebastian");
				writer.flush();
			} else {
				writer.println("texttexttext");
				writer.flush();
			}
			line = "";
		}
	}

	private void close() {
		try {
			this.interrupt();

			if (reader != null)
				reader.close();
			if (writer != null)
				writer.close();
			if (socket != null)
				socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Client();
	}
}


Klasse mit der ein User am Server "behandelt" wird


Code:
package de.fiducia.server;

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

public class ServerUser extends Thread {
	private Server server;
	private Socket socket;
	private PrintWriter writer;
	private BufferedReader reader;
	private String name;
	
	public ServerUser(Server server, Socket socket, String name){
		this.server = server;
		this.socket = socket;
		this.name = name;
		
		try {
			writer = new PrintWriter(socket.getOutputStream());
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		this.start();

	}
	public void print(String text){
		writer.println(text);
		writer.flush();
	}
	public void run(){
		String input = null;
		while(socket != null && !isInterrupted()){
			try {
				input = reader.readLine();
				System.out.println("input: ");
				System.out.println(input);
				
				server.append("Message " + input + " received.\n");
				
				if(input != null && !input.trim().toLowerCase().equals(""))
					server.broadcast(input);
				
			} catch (IOException e) {
				interrupt();
				e.printStackTrace();
			}
		}
		
		if(socket == null || socket.isClosed()){
			this.interrupt();
		}
		
	}
	public void close(){
		try {
			this.interrupt();
			if(reader != null)
				reader.close();
			if(writer != null)
				writer.close();
			if(socket != null);
				socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public String toString(){
		return name;
	}

}


Bin für jede Hilfe dankbar...ach ja..verbesserungsvorschläge von wegen Geschwindigkeit u.s.w. wären nett.

Gruß Sebastian
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
S RMI Chat Problem, Client bekannt machen Netzwerkprogrammierung 2
B Multi-chat Problem Netzwerkprogrammierung 3
N Java Chat-Problem Netzwerkprogrammierung 4
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben