Serversocket und Server, Probleme mit Datenausgabe bei mehreren Clienten.

Funresort

Erfahrenes Mitglied
hi Leute,

hab leider grad ein Problem.

also das ist mein Server:

Java:
package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class ChatServer {

	private static String back = "";
	private static ArrayList<String> socketList = new ArrayList<String>();

	private static void handleConnection(Socket client) throws IOException {
		String lineSeparator = System.getProperty("line.separator");
		BufferedReader in = new BufferedReader(new InputStreamReader(
				client.getInputStream()));
		in.ready();
		String read2 = "";
		String read = null;
		while ((read = in.readLine()) != null) {

			read = read + lineSeparator;
			read2 = read2 + read;

		}
		back = read2;

		output();
	}

	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(3141, 30,
				InetAddress.getLocalHost());
		ServerInput si = new ServerInput(socketList);
		Thread t = new Thread(si);
		t.start();
		while (true) {
			Socket client = null;

			try {

				client = server.accept();
				handleConnection(client);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (client != null)
					try {
						client.close();
					} catch (IOException e) {
					}
			}
		}
	}

	public static void output() {
		Socket server = null;
		try {
			for (int count = 0; count < socketList.size(); count++) {
				String b = socketList.get(count);
				server = new Socket(b, 3143);
				BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
						server.getOutputStream()));

				out.write(back, 0, back.length());
				out.flush();
			}
		} catch (IOException e) {
		} finally {
			if (server != null)
				try {
					server.close();
				} catch (IOException e) {
				}
		}
	}
}


Java:
package test;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class ServerInput implements Runnable {

	private ArrayList<String> socketList;
	public ServerInput(ArrayList<String> socketList2) {
		socketList = socketList2;
	}

	private void handleConnection(Socket client) throws IOException {
		int count = 0;
		for (int counti = 0; counti < socketList.size(); counti++) {
			if (client.getInetAddress().equals(socketList.get(counti))) {
				count = 1;
			}
		}
		if (count == 0) {
			 socketList.add(client.getInetAddress().getHostAddress());
		} else {

			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
					client.getOutputStream()));
			String s = "Es darf nur ein Fenster geöffnet werden!";
			out.write(s, 0, s.length());
			out.flush();
			client.close();
		}

	}

	@Override
	public void run() {
		ServerSocket server;
		try {
			server = new ServerSocket(3140, 30, InetAddress.getLocalHost());

			while (true) {
				Socket client = null;

				try {
					client = server.accept();
					handleConnection(client);
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					if (client != null)
						try {
							client.close();
						} catch (IOException e) {
						}
				}
			}
		} catch (IOException e1) {
		}

	}
}



Die Clients funktionieren einwandfrei, nur mein Problem ist, das ich die Daten nur an den letzen Connekteten Clienten bekomme und die anderen nichts, kann aber von nem anderen Clienten was schreiben, dann wird dies an den letzten Connekteten Clienten ausgegeben.

Gruß Chris
 
Zurück