Ahoj, v jave se snažím o úplně jednoduchou komunikaci klient server pomocí socketů. Server spustím, spustím klienta, server vypíše že se klient připojil, pošlu zprávu, server jí vypíše. Můj problém nastává, když se klientů připojí víc. Klient který je první v ArrayListu muže psát kolik chce a server to vypisuje, ale pokud něco napíše klient spustěný jako druhý jeho text se vypíše až po odeslání zprávy od klienta číslo jedna. Pokud se připojí klienti tři je v tom chaos ještě větší. Mě už nic nenapadá tak bych byl vděčný za každé nakopnutí správným směrem. Předem dík.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server2 {
private ServerSocket serverSocket;
private ArrayList<BufferedReader> listOfBuffer = new ArrayList<>();
private static int port = 9939;
public Server2() {
try {
serverSocket = new ServerSocket(port);
listen();
}catch(IOException ex) {
System.out.println(ex);
}
}
private void clientListen() {
try {
Socket clientSocket = serverSocket.accept();
listOfBuffer.add(new BufferedReader(new InputStreamReader
(clientSocket.getInputStream())));
System.out.println("client: "
+ clientSocket.getInetAddress().getHostAddress()
+ " has been connection");
}catch(IOException ex) {
System.out.println(ex);
}
}
private synchronized void dataRead() {
for(int i = 0; i<listOfBuffer.size(); i++) {
try {
BufferedReader br = listOfBuffer.get(i);
String data = br.readLine();
if(data == null) {
listOfBuffer.remove(i);
}else {
System.out.println(data);
}
}catch(IOException ex) {
System.out.println(ex);
}
}
}
private void listen() {
Thread vlakno1 = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
clientListen();
}
}
});
vlakno1.start();
while(true) {
dataRead();
}
}
public static void main(String[] args) {
Server2 server = new Server2();
}
}