CCCPaste

Untitled

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: