java.net.SocketException: Software caused connection abort: recv failed

ja steht ja bereits im titel.
Es geht um das Chat Programm.
Wenn ich (auch lokal) mit mehreren clients chatte, sind die ersten paar nachrichten ok,
kommen an werden auch in allen clients angezeigt, aber dann kommen auf einmal keine nachrichten mehr an, und ungefähr 2
sekunden später wird eclipse zugespamt mit

error console
[spoiler]


java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)
java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at de.skysoldier.chat.ChatClient.run(ChatClient.java:47)
	at java.lang.Thread.run(Unknown Source)

[/spoiler]

Woran kann das bloß liegen?
Der Fehler tritt hier auf:

	while(true){
		try{
			String newMsg = reader.readLine();
			log(newMsg);
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
}```

in der zeile String newMsg = reader.readLine();
geschrieben wird das ganze hier, also vom server aus, in einer schleife für alle clients:

```public void writeLine(String s){
	try{
		stringWriter.print(s + "
");
		stringWriter.flush();
	}
	catch(Exception e){
		e.printStackTrace();
	}
}```

ich versteh wirklich nicht was da kaputt ist. 
hat einer eine idee?
Das tritt wie gesagt sowohl auf, wenn ich komplett im localhost bin, als auch mit externen pcs. (freunde)

Vielen Dank!

Die geposteten Zeilen sind sicher nicht die Ursache des Problems.
Scheinbar wird die Verbindung geschlossen bzw abgebrochen bevor der Lesevorgang abgeschlossen ist.
Um die Ursache zu finden benötigt man mehr Code - idealerweise ausführbar.

Stichwort: Socket-Timeout
aus dem bischen Code lässt sich da nicht viel entnehmen (nein ich will nicht mehr Code sehen^^)
Außerdem empfehle ich Dir ein Logging Framework welches den Zeitpunkt mit ausgibt. Dann siehst Du das z.B. auch gleich ob der Fehler regelmäßig kommt (eben wegen einem Socket-Timeout) oder ob er unregelmäßig kommt.

@_Michael :

server
[spoiler]

package de.skysoldier.chat;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.LinkedBlockingQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ChatServer implements Runnable {
	
	private Thread thread;
	private ServerSocket serverSocket;
	private UserManager userManager;
	private LinkedBlockingQueue<ClientUser> clientUsers;
	private ServerGui gui;
	
	public ChatServer(int port, ServerGui gui){
		this.gui = gui;
		thread = new Thread(this);
		try{
			serverSocket = new ServerSocket(port);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		clientUsers = new LinkedBlockingQueue<>();
		userManager = new UserManager();
		thread.start();
	}
	
	public String getLocalPort(){
		return serverSocket.getLocalPort() + "";
	}
	
	public String getLocalIp(){
		try{
			return InetAddress.getLocalHost().getHostAddress();
		}
		catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public void run(){
		gui.log("#Server [connection_start]: STARTING");
		try{
			String endCondition = "";
			while(!endCondition.equals("stop")){
				ClientUser clientUser = clientUsers.take();
				String input = clientUser.readLine();
				clientUsers.put(clientUser);
				if(input != null){
					endCondition = input;
					gui.log("#Server [new_message] [" + clientUser.getLocalIp() + "]
          " + input);
					synchronized(this){
						for(ClientUser loopUser : clientUsers){
							loopUser.writeLine("[new message] " + input);
						}
					}
				}
			}
			gui.log("#Server [connection_end]: EXIT");
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	
	private class UserManager implements Runnable {
		
		Thread t;
		
		private UserManager(){
			t = new Thread(this);
			t.start();
		}
		
		public void run(){
			while(true){
				try{
					synchronized (this) {
						ClientUser clientUser = new ClientUser(serverSocket.accept());
						clientUsers.put(clientUser);
						gui.log("#Server [new_client_found]: " + clientUser.getLocalIp());
					}
				}
				catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	}
	
	private class ClientUser {
		
		private BufferedReader messageReader;
		private PrintWriter stringWriter;
		private Socket clientSocket;
		
		private ClientUser(Socket clientSocket){
			init(clientSocket);
		}
		
		private void init(Socket clientSocket){
			try{
				messageReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
				stringWriter = new PrintWriter(clientSocket.getOutputStream());
			}
			catch(Exception e){
				e.printStackTrace();
			}
			this.clientSocket = clientSocket;
		}
		
		public String readLine(){
			try{
				if(messageReader.ready()){
					return messageReader.readLine();
				}
				else{
					return null;
				}
			}
			catch(Exception e){
				e.printStackTrace();
				return null;
			}
		}
		
		public void writeLine(String s){
			try{
				stringWriter.print(s + "
");
				stringWriter.flush();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		
		public String getLocalIp(){
			return clientSocket.getInetAddress().getHostAddress();
		}
	}
}
public class ServerGui {

	JFrame f;
	JPanel content;
	JLabel information;
	JScrollPane logContainer;
	JTextArea pinBoard;
	ChatServer server;
	
	public ServerGui(){
		buildGui();
		init();
	}
	
	private void init(){
		server = new ChatServer(5151, this);
		information.setText(server.getLocalIp() + " : " + server.getLocalPort());
	}
	
	private void buildGui(){
		f = new JFrame();
		f.setAlwaysOnTop(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(600, 300);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		f.setLocation((int) screenSize.getWidth() - 600, (int) screenSize.getHeight() - 300);
		f.setLayout(new BorderLayout());
		content = new JPanel();
		content.setLayout(new BorderLayout());
		information = new JLabel("test");
		content.add(information, BorderLayout.PAGE_START);
		pinBoard = new JTextArea();
		pinBoard.setLineWrap(true);
		pinBoard.setWrapStyleWord(true);
		logContainer = new JScrollPane(pinBoard, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		content.add(logContainer, BorderLayout.CENTER);
		f.add(content);
		f.setVisible(true);
	}
	
	public void log(String s){
		pinBoard.setText(pinBoard.getText() + "
" + s);
	}
	
	public static void main(String[] args) {
		new ServerGui();
	}
}

[/spoiler]

client
[spoiler]

package de.skysoldier.chat;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ChatClient implements Runnable {
	
	private Thread thread;
	private Socket s;
	private PrintWriter writer; 
	private BufferedReader reader;
	private ClientGui gui;
	
	public ChatClient(String ip, int port, ClientGui gui){
		this.gui = gui;
		try{ 
			s = new Socket(ip, port);
			writer = new PrintWriter(s.getOutputStream(), true);
			reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
		}
		catch(Exception e){
			e.printStackTrace();
		}
		thread = new Thread(this);
		thread.start();
	}
	
	public void send(String s){
		try{
			writer.print(s + "
");
			writer.flush();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void log(String s){
		gui.log(s);
	}
	
	public void run(){
		while(true){
			try{
				String newMsg = reader.readLine();
				log(newMsg);
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}
public class ClientGui {
	
	private JFrame f;
	private JPanel content;
	//prechat
	private JPanel prechat;
	private JTextField ipEntry;
	private JTextField portEntry;
	private JButton connect;
	//inchat
	private JPanel inchat;
	private JPanel sending;
	private JTextField messageInput;
	private JScrollPane chatBoxContainer;
	private JTextArea chatBox;
	private JButton send;
	private ChatClient client;
	private Font standardFont;
	
	public ClientGui(){
		buildGui();
	}
	
	private void init(String ip, int port){
		content.remove(prechat);
		client = new ChatClient(ip, port, this);
		content.add(inchat);
		content.revalidate();
		chatBox.setText("#Chat Startet - Server:
" + getFullLine("-"));
	}
	
	private void buildGui(){
		standardFont = new Font("Calibri", Font.PLAIN, 14);
		f = new JFrame();
		f.setAlwaysOnTop(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(600, 400);
		f.setLocation(500, 0);
		f.setLayout(new BorderLayout());
		content = new JPanel();
		content.setLayout(new BorderLayout());
		prechat = new JPanel();
		ipEntry = new JTextField(10);
		ipEntry.setBorder(BorderFactory.createTitledBorder("Enter Server Ip:"));
		portEntry = new JTextField(10);
		portEntry.setBorder(BorderFactory.createTitledBorder("Enter Server Port:"));
		connect = new JButton("connect");
		connect.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				init(ipEntry.getText(), Integer.parseInt(portEntry.getText()));
			}
		});
		prechat.add(ipEntry);
		prechat.add(portEntry);
		prechat.add(connect);
		inchat = new JPanel();
		inchat.setLayout(new BorderLayout());
		chatBox = new JTextArea();
		chatBox.setAutoscrolls(true);
		chatBox.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createEtchedBorder(Color.LIGHT_GRAY, Color.DARK_GRAY), 
				BorderFactory.createEmptyBorder(10, 10, 10, 10)));
		chatBox.setEditable(false);
		chatBox.setFont(standardFont);
		chatBoxContainer = new JScrollPane(chatBox, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		chatBoxContainer.setPreferredSize(new Dimension(0, 200));
		chatBoxContainer.setBorder(BorderFactory.createEtchedBorder(Color.LIGHT_GRAY, Color.DARK_GRAY));
		inchat.add(chatBoxContainer, BorderLayout.NORTH);
		sending = new JPanel();
		messageInput = new JTextField(10);
		send = new JButton("send");
		send.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				client.send(messageInput.getText());
				messageInput.setText("");
			}
		});
		sending.add(messageInput);
		sending.add(send);
		inchat.add(sending, BorderLayout.SOUTH);
		content.add(prechat);
		f.add(content);
		f.setVisible(true);
	}
	
	private String getFullLine(String c){
		FontMetrics f = chatBox.getGraphics().getFontMetrics();
		String s = "";
		int cWidth = f.stringWidth(c);
		int minus = (chatBox.getInsets().right + chatBox.getInsets().left) / cWidth;
		for(int i = 0; i < chatBox.getWidth() / cWidth - minus; i++){
			s+=c;
		}
		return s;
	}
	
	public void log(String s){
		chatBox.setText(chatBox.getText() + "
" + s);
	}
	
	public static void main(String[] args) {
		new ClientGui();
	}
}

[/spoiler]

Der Fehler tritt nicht immer auf, nur manchmal, manchmal sogar nur wenn 2 clients über localhost an sind.
Wann und warum genau versucht ich gerade herauszufinden.

@mogel : socket timeout… was soll mir das sagen? Ich mein, wieso bleibt da irgendwas irendwo hängen?
logging framework, ich hab mal was von wireshark gehört, ist das soetwas oder was komplett anderes?
was könntest du mir denn empfehlen?

Sorry, aber bei den Fragen

http://lmgtfy.com/?q=java+socket+timeout

http://lmgtfy.com/?q=java+logging+framework

Im Zweifelsfall schreibst Du Dir was eigenes was neben Deiner meldung auch noch die Zeit mit ausgibt.

So auf den ersten Blick ist nichts zu erkennen, dass einen Verbindungsabbruch (ohne Beenden durch den Anwender) auslösen könnte. Man müsste da mal genauer prüfen wann der Verbindungsabbruch auftritt - ist wohl etwas schwierig wenn der Fehler nicht regelmäßig auftritt. Eventuell liegt es tatsächlich an einem Timeout…

Allgemein: Da Du hier die Nachrichten Clients ohne Pause pollst dürfte die CPU auf 100% laufen. Ich würde hier ab und an mal eine Pause einlegen, evtl. Verzögerungen um ein paar 100ms sollten bei einem Chat doch vertretbar sein.
Es werden einige Variablen unnötigerweise als Instanzvariablen deklariert, das macht den Code etwas unübersichtlich. Grundsätzlich den Scope von Variablen möglichst klein halten - hilft u.a. auch der VM die Ausführung des Codes zu optimieren.
Das synchronized(this) jeweils in ChatServer und UserManager scheint hier unnötig. Ich finde keine Stelle an der von einem anderen Thread auf eines der beiden Objekte zugegriffen wird.

Hm wie entsteht denn so ein timeout genau?

  • ja das wurde mir schon empfholen mit der kleinen pause, bin (ehrlich) noch nicht dazu gekommen ^^
  • hm stimmt, ich dachte bisher instanzvariable = übersichtlich, aber anscheinend ist es “scope kleinhalten” wie du sagst. werde mich umgewöhnen, danke.
  • ich hab vergessen statt this clientUsers einzubauen. wenn ich gerade mit for(i) durch clientUsers iteriere um überall die neue nachricht anzuzeigen, und währenddessen
    ein neuer benutzer gefunden wird (serversocket#accept) dann fliegt ne concurrent vom stapel.

So ein Timeout kann auf unterschiedlichen Ebenen entstehen. Allerdings hast Du auf Anwendungsebene keinen explizit gesetzt und, dass der Verbindungsfehler auch bei Clients ausschließlich auf localhost passiert irritiert mich etwas…

Musst halt nur aufpassen, dass sich die Threads dann nicht gegenseitig blockieren. Dachte, dass Du deswegen die BlockingQueue nutzt, um nicht synchronisieren zu müssen. Ich würde daher empfehlen entweder BlockingQueue oder synchronisieren… wobei ich persönlich mit einer (Blocking)Queue für einen solchen Einsatzzweck nicht anfreunden kann…

nene ich hab ja ne blockingqueue, aber schau nochmal in den code,
wenn jemand eine neue nachricht schreibt, wird ja in einer for dadurch iteriert, um auf jedes clientSocket die neue nachricht zu schreiben…

*** Edit ***

Hm es ist zwar nicht die selbe fehlermeldung, aber es ist mir so aufgefalen, weil es ähnlich klingt:
hat das auch etwas damit zu tun?

Edit: sry das erste war falsch, also die mini im anfang. einfach ignorieren.

eben nicht - genau deshalb kommt nämlich der Timeout. Das Auslesen erfolgt blockierend.

Das Lesen schon, aber die Überprüfung auf ready() läuft ja in einer Dauerschleife ohne Pause.

*** Edit ***

evtl. irritieren, dass die Klasse ClientUser eine Methode readLine() besitzt (die nicht blockiert)

naja, client user erbt ja nicht von bufferedreader, daher kann man ja drauf kommen das es was anderes ist ^^
aber stimmt, irgendwie doof den methoden namen gleich zu lassen… aber er passt doch so gut :confused: