import java.net.*; import java.io.*; import java.util.*; public class Server { final static int server_port = 9000; static ArrayList activeClients = new ArrayList<>(); static int numOfClients = 0; public static void main(String[] args) throws Exception{ ServerSocket serverSocket = new ServerSocket(server_port); Socket s = null; int dali_treba_da_se_vnese_pass = -1; while(true) { s = serverSocket.accept(); // primi go socketot ispraten od clientot System.out.println("New user is trying to connect..."); DataInputStream input = new DataInputStream(s.getInputStream()); DataOutputStream output = new DataOutputStream(s.getOutputStream()); String username = input.readUTF(); StringTokenizer stringTokenizer = new StringTokenizer(username, ":"); String s1 = stringTokenizer.nextToken(); String s2 = stringTokenizer.nextToken(); boolean ok = false; if(s1.equals("name") && s2.length() > 0) { ok = true; } if(!ok) { output.writeUTF("Login failed!"); output.flush(); continue; } String password = input.readUTF(); System.out.println(password); StringTokenizer st = new StringTokenizer(password, ":"); String p1 = st.nextToken(); p1 = st.nextToken(); boolean upper_case = false; boolean number = false; boolean specialChar = false; for(int i = 0; i < p1.length(); i++) { char c = p1.charAt(i); if(c >= 'A' && c <= 'Z') { upper_case = true; } if(c >= '1' && c <= '9') { number = true; } if(c >= '!' && c <= '/') { specialChar = true; } } if(upper_case && number && specialChar && p1.length() >= 8) { } else { output.writeUTF("Login failed!"); output.flush(); continue; } System.out.println("User: " + s2 + " is connected!"); ClientThread cl = new ClientThread(s, s2, input, output); activeClients.add(cl); cl.start(); numOfClients++; } } } class ClientThread extends Thread { private String username; private DataInputStream input; private DataOutputStream output; Socket socket; boolean logged_in = false; public ClientThread(Socket s, String usname, DataInputStream dis, DataOutputStream dos) { socket = s; username = usname; input = dis; output = dos; logged_in = true; } @Override public void run() { int pass = -1; while(true) { try { if(socket.isConnected()) { String recieved = input.readUTF(); System.out.println(recieved); StringTokenizer stringTokenizer = new StringTokenizer(recieved, ":"); String to_whom = stringTokenizer.nextToken(); String message = stringTokenizer.nextToken(); boolean ok = false; for(ClientThread client : Server.activeClients) { if(client.username.equals(to_whom) && client.logged_in == true) { client.output.writeUTF("User " + username + " says: " + message); client.output.flush(); ok = true; break; } } if(!ok) { output.writeUTF("User not found or logged in!"); output.flush(); } } else { break; } } catch (Exception e) { e.printStackTrace(); } } try{ input.close(); output.close(); } catch (IOException ex) { ex.printStackTrace(); } } } // name:fdsjfksdf // password: