瀏覽代碼

Всё чётенько!

Alec 4 年之前
父節點
當前提交
5bb1b4f8f6

二進制
out/production/NetWork/client/Main.class


二進制
out/production/NetWork/com/company/Client.class


二進制
out/production/NetWork/com/company/Main.class


+ 87 - 9
src/client/Main.java

@@ -4,24 +4,102 @@ import com.company.Transport;
 
 import java.io.*;
 import java.net.Socket;
-import java.nio.charset.StandardCharsets;
+import java.util.Scanner;
 
 public class Main {
     public static void main(String[] args) {
+        Socket socket = null;
         try {
-            Socket socket = new Socket("192.168.10.81", 9125);
+            socket = new Socket("localhost", 9125);
 
-            ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
-            ObjectInputStream is = new ObjectInputStream(socket.getInputStream());
+            ReadThread readThread = new ReadThread(socket);
+            WriteThread writeThread = new WriteThread(socket);
 
-            Transport t = new Transport();
-            t.Name = "Hello";
-            t.Message = "World";
+            readThread.start();
+            writeThread.start();
 
-            os.writeObject(t);
+            readThread.join();
+            writeThread.join();
 
-        } catch (IOException e) {
+        } catch (IOException | InterruptedException e) {
             e.printStackTrace();
+            if (socket != null) {
+                try {
+                    socket.close();
+                } catch (IOException exception) {
+                    exception.printStackTrace();
+                }
+            }
+        }
+    }
+}
+
+class ReadThread extends Thread {
+    private Socket socket;
+
+    public ReadThread(Socket socket) {
+        this.socket = socket;
+    }
+
+    @Override
+    public void run() {
+        while (!isInterrupted()) {
+            try {
+                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
+
+                Object o = ois.readObject();
+                if (o instanceof Transport) {
+                    Transport t = (Transport)o;
+
+                    System.out.print("\033[1;31m\033[40m " + t.Name + ": \u001B[0m ");
+                    System.out.println(t.Message);
+                }
+
+            } catch (IOException | ClassNotFoundException exception) {
+                exception.printStackTrace();
+                try {
+                    socket.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                return;
+            }
+        }
+    }
+}
+
+class WriteThread extends Thread {
+    private Socket socket;
+    private Scanner scanner;
+    private final String Name = "Alec";
+
+    public WriteThread(Socket socket) {
+        this.socket = socket;
+        this.scanner = new Scanner(System.in);
+    }
+
+    @Override
+    public void run() {
+        while (!isInterrupted()) {
+            try {
+                ObjectOutputStream ois = new ObjectOutputStream(socket.getOutputStream());
+
+                Transport t = new Transport();
+                t.Name = this.Name;
+                t.Message = scanner.nextLine();
+
+                ois.writeObject(t);
+                ois.flush();
+
+            } catch (IOException exception) {
+                exception.printStackTrace();
+                try {
+                    socket.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                return;
+            }
         }
     }
 }

+ 11 - 10
src/com/company/Client.java

@@ -1,16 +1,13 @@
 package com.company;
 
-import javax.management.Attribute;
+import javax.xml.crypto.Data;
 import java.io.*;
 import java.net.Socket;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
-import java.util.Scanner;
 
 public class Client extends Thread {
+    // Сокет текущего клиента
     private Socket socket;
-    public ObjectInputStream inputStream;
-    public ObjectOutputStream outputStream;
     // Список всех подключенных слиентов
     private List<Client> clientList;
 
@@ -19,9 +16,10 @@ public class Client extends Thread {
     public Client(Socket socket, List<Client> clientList) throws IOException {
         this.socket = socket;
         this.clientList = clientList;
+    }
 
-        inputStream = new ObjectInputStream(socket.getInputStream());
-        outputStream = new ObjectOutputStream(socket.getOutputStream());
+    public Socket getSocket() {
+        return socket;
     }
 
     @Override
@@ -29,12 +27,15 @@ public class Client extends Thread {
        while (!isInterrupted()) {
 
            try {
-               Transport t = (Transport) inputStream.readObject();
+               ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
+
+               Transport t = (Transport) ois.readObject();
 
                for (Client client : clientList) {
                    if (client.socket != this.socket) {
-                       client.outputStream.writeObject(t);
-                       client.outputStream.flush();
+                       ObjectOutputStream coos = new ObjectOutputStream(client.socket.getOutputStream());
+                       coos.writeObject(t);
+                       coos.flush();
                    }
                }
 

+ 7 - 43
src/com/company/Main.java

@@ -1,6 +1,7 @@
 package com.company;
 
 import java.io.IOException;
+import java.io.ObjectOutputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.util.ArrayList;
@@ -8,53 +9,16 @@ import java.util.List;
 import java.util.Scanner;
 
 public class Main {
-    private static List<Client> clients = new ArrayList<>();
 
     public static void main(String[] args) {
-
-        AdminWrite adminWrite = new AdminWrite();
-        adminWrite.start();
+        Server server = new Server(9125);
+        server.start();
 
         try {
-            ServerSocket ss = new ServerSocket(9125);
-
-            while (true) {
-                Socket clientSocket = ss.accept();
-
-                try {
-                    Client client = new Client(clientSocket, clients);
-                    clients.add(client);
-                    client.start();
-                } catch (IOException e) {
-                    System.out.println(e.getMessage());
-                }
-            }
-
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static class AdminWrite extends Thread {
-        @Override
-        public void run() {
-            Scanner scanner = new Scanner(System.in);
-            while (!isInterrupted()) {
-                String message = scanner.nextLine();
-
-                Transport t = new Transport();
-                t.Name = "ADMIN";
-                t.Message = message;
-                for (Client client : clients) {
-                    try {
-                        client.outputStream.writeObject(t);
-                        client.outputStream.flush();
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
+            server.join();
+        } catch (InterruptedException exception) {
+            exception.printStackTrace();
         }
     }
-
 }
+

+ 84 - 0
src/com/company/Server.java

@@ -0,0 +1,84 @@
+package com.company;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Scanner;
+
+public class Server extends Thread {
+    private int port;
+    private boolean interrupt = false;
+    private List<Client> clients = new ArrayList<>();
+    private ServerSocket serverSocket;
+
+    public Server(int port) {
+        this.port = port;
+
+        AdminWrite adminWrite = new AdminWrite();
+        adminWrite.start();
+    }
+
+    @Override
+    public void run() {
+        System.out.println("\033[32mSERVER STARTUP\u001B[0m");
+
+        try {
+            serverSocket = new ServerSocket(port);
+
+            while (!isInterrupted() || !interrupt) {
+                Socket clientSocket = serverSocket.accept();
+
+                System.out.println("Connected new user from " + clientSocket.getRemoteSocketAddress().toString());
+
+                try {
+                    Client client = new Client(clientSocket, clients);
+                    clients.add(client);
+                    client.start();
+                } catch (IOException e) {
+                    System.out.println(e.getMessage());
+                }
+            }
+
+        } catch (IOException e) {
+            System.out.println(e.getMessage());
+        }
+
+        System.out.println("\033[31mSERVER SHUTDOWN\u001B[0m");
+    }
+
+    private class AdminWrite extends Thread {
+        @Override
+        public void run() {
+            Scanner scanner = new Scanner(System.in);
+            while (!isInterrupted()) {
+                String message = scanner.nextLine();
+
+                if (message.contains("exit")) {
+                    try {
+                        serverSocket.close();
+                    } catch (IOException exception) {
+                        exception.printStackTrace();
+                    }
+                    interrupt = true;
+                }
+
+                Transport t = new Transport();
+                t.Name = "\033[1;36m\033[44m SERVER\u001B[0m";
+                t.Message = message;
+                for (Client client : clients) {
+                    try {
+                        ObjectOutputStream coos = new ObjectOutputStream(client.getSocket().getOutputStream());
+                        coos.writeObject(t);
+                        coos.flush();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+}