# Problem beim Programmieren eines Chatprogramms



## Rabummelzel (15. Dez 2013)

Hallo. Ich habe mich jetzt seit geraumer Zeit mit Java auseinander gesetzt und habe nun ein Problem beim Programmieren eines Chats. Ich bin mir nicht genau sicher, woran es liegt, aber der Code scheint immer bei in.readLine() zu hängen.
	
	
	
	





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

public class MessengerClient implements Runnable {
	private int port;
	private Socket clientSock;
	private InetAddress serverIP;
	private String user;
	private String key;
	private BufferedReader in;
	
	public MessengerClient(String ip, int port, String user, String key) {
		this.port = port;
		this.user = user;
		this.key = key;
		try {
			this.serverIP = InetAddress.getByName(ip);
			clientSock = new Socket(serverIP, this.port);
			in = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
			System.out.println(clientSock);
		}catch(UnknownHostException ie) {
			
		}catch (IOException io) {
		}
		
	}
	
	@Override
	public void run() {
		try {
			
			StringBuffer nachricht = new StringBuffer("");
			
			while(true) {
				String tmp = in.readLine();
				
				if(tmp == null){
					
				}else
				System.out.println(new Message(nachricht.toString()).decrypt(key));
			}
			
			}catch(ConnectException oo) {
			}catch (IOException io) {
			}
	}
	
	public void write(String nachricht) {
		try {
			
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSock.getOutputStream()));
			
			String message = new String(new Message(user + " : " + nachricht, key).getMessage());
			
			out.write(message);
			out.flush();
			
			
		}catch(ConnectException oo) {
		}catch (IOException io) {
		}
	}
	
	public static void main(String[] args) {
		MessengerClient client = new MessengerClient("127.0.0.1", 8765, "Stefan", "hdf");
		Thread t = new Thread(client);
		t.start();
		
		client.write("hallo");
		
		
	}
}
```


```
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class chatserver implements Runnable {
	
	private ServerSocket listen;
	private Vector<connection> connections;
	ExecutorService exec = Executors.newCachedThreadPool();
	
	public chatserver() {
		try {
			listen = new ServerSocket(8765);
		}catch(IOException io) {
		}
		
		connections = new Vector<connection>();
		
	}

	@Override
	public void run() {
		try {
			while (true){
				Socket client = listen.accept();
				System.out.println(client);
				
				connections.add(new connection(client, this));
			}
		}catch(IOException oo){
			
		}
		
	}
	
	public void broadcast(String line) {
		int i;
		connection you;
		
		for(i = 0; i < connections.size(); i++) {
			you = connections.elementAt(i);
			try {
				
				you.out.write(line);
				you.out.flush();
			}catch(IOException io) {
			}

		}
	}
	public static void main(String[] args) {
		chatserver chat = new chatserver();
		ExecutorService lol = Executors.newCachedThreadPool();
		chat.run();
		
	}
	
}
```


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

class connection implements Runnable{
	private Socket client;
	private chatserver chat;
	public BufferedReader in;
	public BufferedWriter out;
	
	public connection(Socket client, chatserver chat) {
		this.client = client;
		this.chat = chat;
		try {
			in = new BufferedReader(new InputStreamReader(this.client.getInputStream()));
			out = new BufferedWriter(new OutputStreamWriter(this.client.getOutputStream()));
		}catch(IOException io){
			
		}
		Thread t = new Thread(this);
		t.start();
		
		
	}
	@Override
	public void run() {
		try {

			String line;
			while (true) {
				line = in.readLine();
				if(line!=null){
					chat.broadcast(line);
				}
			}
			
		}catch(IOException lol) {
		}
		
	}
	
}
```

Hängen tuts immer bei den in.readLine() Methoden. Ich habe aber keine Ahnung warum.
Die Main Methoden waren nur zum testen da und da es da schon nicht geklappt hat, habe ich erstmal nicht weiter gemacht. Die Klasse Message macht nichts anderes als die Nachricht zu verschlüsseln (das klappt). Ich habe mich hier Kaffee & Kuchen - Datenbank-Anbindung mit JDBC inspirieren lassen. Ich hoffe ihr könnt mir helfen und ich hoffe ich habe mich nicht zu schlimm angestellt bei meinem ersten Post.


----------



## ARadauer (15. Dez 2013)

Lass das verschlucken der exceptions


----------



## Rabummelzel (15. Dez 2013)

Mhm also Exception wird keine geworfen oder was meinst du?


----------



## ARadauer (16. Dez 2013)

```
}catch(IOException lol) {
        }
```
das ist sehr sehr böse... das macht man nur ganz ganz selten
du verschluckst hier fehlermeldungen, gib wenigstens den fehler aus 

```
}catch(IOException lol) {
   lol.printStackTrace();
}
```


----------



## rme (16. Dez 2013)

readLine liest bis zum Zeilenumbruch, aber du verschickst keinen


----------



## Rabummelzel (16. Dez 2013)

Danke das readLine einen Zeilenumbruch erwartet wusste ich nicht . Es war natürlich noch ein Fehler drinne und zwar habe ich einen alten überbleibsel nicht korrekt abgeändert  


```
System.out.println(new Message(tmp).decrypt(key));
```
Muss es im Client natürlich heißen. Der Stringbuffer nachricht muss weg.


----------

