├── .idea ├── .name ├── vcs.xml ├── .gitignore ├── misc.xml ├── modules.xml ├── runConfigurations.xml ├── inspectionProfiles │ └── Project_Default.xml └── uiDesigner.xml ├── src ├── com │ └── Nimesh │ │ └── sokectProgramming │ │ ├── views │ │ ├── assests │ │ │ ├── Images │ │ │ │ ├── admin.png │ │ │ │ ├── close.png │ │ │ │ ├── maximize.png │ │ │ │ ├── minimize.png │ │ │ │ └── technical-support.png │ │ │ ├── ScreentShort │ │ │ │ └── clientSever.png │ │ │ └── styles │ │ │ │ └── Sheat.css │ │ ├── SeverManagemant.fxml │ │ └── ClientManagemant.fxml │ │ ├── model │ │ ├── Client.java │ │ └── Server.java │ │ └── controller │ │ ├── ClientManagemantController.java │ │ └── SeverManagemantController.java ├── ClientAppInitilaizer.java └── SeverAppInitilaizer.java ├── Client Server Messenger.iml ├── LICENSE └── README.md /.idea/.name: -------------------------------------------------------------------------------- 1 | Sockets Programming -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/Images/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/Images/admin.png -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/Images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/Images/close.png -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/Images/maximize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/Images/maximize.png -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/Images/minimize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/Images/minimize.png -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/Images/technical-support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/Images/technical-support.png -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/ScreentShort/clientSever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NimeshPiyumantha/Client-Server-Messenger/HEAD/src/com/Nimesh/sokectProgramming/views/assests/ScreentShort/clientSever.png -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /Client Server Messenger.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/assests/styles/Sheat.css: -------------------------------------------------------------------------------- 1 | #navigateBar { 2 | -fx-background-color: #2c3e50; 3 | } 4 | 5 | #bgColor { 6 | -fx-background-color: #34495e; 7 | } 8 | 9 | #test { 10 | -fx-fill: #ecf0f1; 11 | -fx-font-family: "Bodoni MT", sans-serif; 12 | -fx-font-weight: bold; 13 | -fx-font-size: 25; 14 | } 15 | 16 | #btnSever { 17 | -fx-background-color: #16a085; 18 | -fx-fill: #ecf0f1; 19 | -fx-font-family: "Bodoni MT Black", sans-serif; 20 | -fx-font-weight: bold; 21 | -fx-font-size: 20; 22 | -fx-background-radius: 10; 23 | } 24 | 25 | .anchorPane3 { 26 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Nimesh_Piyumantha 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/ClientAppInitilaizer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : Nimesh Piyumantha 3 | * @since : 0.1.0 4 | **/ 5 | 6 | import javafx.application.Application; 7 | import javafx.fxml.FXMLLoader; 8 | import javafx.scene.Parent; 9 | import javafx.scene.Scene; 10 | import javafx.scene.paint.Color; 11 | import javafx.stage.Stage; 12 | import javafx.stage.StageStyle; 13 | 14 | import java.io.IOException; 15 | import java.util.concurrent.atomic.AtomicReference; 16 | 17 | public class ClientAppInitilaizer extends Application { 18 | 19 | public static void main(String[] args) { 20 | launch(args); 21 | } 22 | 23 | @Override 24 | public void start(Stage primaryStage) throws IOException { 25 | 26 | Parent root = FXMLLoader.load(getClass().getResource("com/Nimesh/sokectProgramming/views/ClientManagemant.fxml")); 27 | Scene scene = new Scene(root); 28 | primaryStage.setScene(scene); 29 | primaryStage.setResizable(false); 30 | primaryStage.initStyle(StageStyle.TRANSPARENT); 31 | scene.setFill(Color.TRANSPARENT); 32 | anableMove(scene, primaryStage); 33 | primaryStage.show(); 34 | } 35 | 36 | private void anableMove(Scene scene, Stage primaryStage) { 37 | AtomicReference xOffset = new AtomicReference<>((double) 0); 38 | AtomicReference yOffset = new AtomicReference<>((double) 0); 39 | scene.setOnMousePressed(event -> { 40 | xOffset.set(primaryStage.getX() - event.getScreenX()); 41 | yOffset.set(primaryStage.getY() - event.getScreenY()); 42 | }); 43 | //Lambda mouse event handler 44 | scene.setOnMouseDragged(event -> { 45 | primaryStage.setX(event.getScreenX() + xOffset.get()); 46 | primaryStage.setY(event.getScreenY() + yOffset.get()); 47 | }); 48 | } 49 | } -------------------------------------------------------------------------------- /src/SeverAppInitilaizer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * @author : Nimesh Piyumantha 3 | * @since : 0.1.0 4 | **/ 5 | 6 | import javafx.application.Application; 7 | import javafx.fxml.FXMLLoader; 8 | import javafx.scene.Parent; 9 | import javafx.scene.Scene; 10 | import javafx.scene.paint.Color; 11 | import javafx.stage.Stage; 12 | import javafx.stage.StageStyle; 13 | 14 | import java.io.IOException; 15 | import java.util.concurrent.atomic.AtomicReference; 16 | 17 | public class SeverAppInitilaizer extends Application { 18 | 19 | public static void main(String[] args) { 20 | launch(args); 21 | } 22 | 23 | @Override 24 | public void start(Stage primaryStage) throws IOException { 25 | 26 | Parent root = FXMLLoader.load(getClass().getResource("com/Nimesh/sokectProgramming/views/SeverManagemant.fxml")); 27 | Scene scene = new Scene(root); 28 | primaryStage.setScene(scene); 29 | primaryStage.setResizable(false); 30 | primaryStage.initStyle(StageStyle.TRANSPARENT); 31 | scene.setFill(Color.TRANSPARENT); 32 | anableMove(scene, primaryStage); 33 | primaryStage.show(); 34 | } 35 | 36 | private void anableMove(Scene scene, Stage primaryStage) { 37 | AtomicReference xOffset = new AtomicReference<>((double) 0); 38 | AtomicReference yOffset = new AtomicReference<>((double) 0); 39 | scene.setOnMousePressed(event -> { 40 | xOffset.set(primaryStage.getX() - event.getScreenX()); 41 | yOffset.set(primaryStage.getY() - event.getScreenY()); 42 | }); 43 | //Lambda mouse event handler 44 | scene.setOnMouseDragged(event -> { 45 | primaryStage.setX(event.getScreenX() + xOffset.get()); 46 | primaryStage.setY(event.getScreenY() + yOffset.get()); 47 | }); 48 | } 49 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Client-Server-Messenger 2 | This is using Java Sockets and Simple GUI Chatting Programmed. 3 | 4 | ### - Client-Server-Messenger 5 | * Java 6 | * JavaFx 7 | * CSS 8 | * Java Sockets 9 | 10 | ## 11 | ![alt text](https://github.com/NimeshPiyumantha/Client-Server-Messenger/blob/master/src/com/Nimesh/sokectProgramming/views/assests/ScreentShort/clientSever.png) 12 | ## 13 | 14 | ### 15 | ### Clone this repository ✅ 16 | ```md 17 | https://github.com/NimeshPiyumantha/Client-Server-Messenger.git 18 | ``` 19 | ## Connect with me 20 | #### If you have any bugs or issues , If you want to explain my code please contact me on : 21 |
22 | 23 | #### nimeshpiyumantha11@gmail.com 24 |
25 | 26 | ## 27 |

28 | __NimeshPiyumantha__ 29 | https://www.linkedin.com/public-profile/settings?trk=d_flagship3_profile_self_view_public_profile 30 | Nimesh Piyumantha 31 | _.nimmaa._ 32 |

33 | 34 | ## 35 |
36 | 37 | ![repo license](https://img.shields.io/github/license/NimeshPiyumantha/Client-Server-Messenger?&labelColor=black&color=3867d6&style=for-the-badge) 38 | ![repo size](https://img.shields.io/github/repo-size/NimeshPiyumantha/Client-Server-Messenger?label=Repo%20Size&style=for-the-badge&labelColor=black&color=20bf6b) 39 | ![GitHub forks](https://img.shields.io/github/forks/NimeshPiyumantha/Client-Server-Messenger?&labelColor=black&color=0fb9b1&style=for-the-badge) 40 | ![GitHub stars](https://img.shields.io/github/stars/NimeshPiyumantha/Client-Server-Messenger?&labelColor=black&color=f7b731&style=for-the-badge) 41 | ![GitHub LastCommit](https://img.shields.io/github/last-commit/NimeshPiyumantha/Client-Server-Messenger?logo=github&labelColor=black&color=d1d8e0&style=for-the-badge) 42 |
43 | 44 |
45 | 46 | #### @2022 [Nimesh Piyumantha](https://github.com/NimeshPiyumantha/), Inc.All rights reserved 47 |
48 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/model/Client.java: -------------------------------------------------------------------------------- 1 | package com.Nimesh.sokectProgramming.model; 2 | 3 | import com.Nimesh.sokectProgramming.controller.ClientManagemantController; 4 | import javafx.scene.layout.VBox; 5 | 6 | import java.io.*; 7 | import java.net.Socket; 8 | 9 | /** 10 | * @author : Nimesh Piyumantha 11 | * @since : 0.1.0 12 | **/ 13 | public class Client { 14 | 15 | private Socket socket; 16 | private BufferedReader bufferedReader; 17 | private BufferedWriter bufferedWriter; 18 | 19 | public Client(Socket socket) { 20 | try { 21 | this.socket = socket; 22 | this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 23 | this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 24 | } catch (IOException e) { 25 | e.printStackTrace(); 26 | System.out.println("Error creating client."); 27 | closeEverything(socket, bufferedReader, bufferedWriter); 28 | } 29 | } 30 | 31 | public void sendMassageSever(String messageToSever){ 32 | try { 33 | bufferedWriter.write(messageToSever); 34 | bufferedWriter.newLine(); 35 | bufferedWriter.flush(); 36 | } catch (IOException e) { 37 | e.printStackTrace(); 38 | System.out.println("Error sending message to the Sever"); 39 | closeEverything(socket, bufferedReader, bufferedWriter); 40 | } 41 | } 42 | 43 | public void receivedMessageFormSever(VBox vBox) { 44 | new Thread(new Runnable() { 45 | @Override 46 | public void run() { 47 | while (socket.isConnected()) { 48 | try { 49 | String massageFromSever = bufferedReader.readLine(); 50 | ClientManagemantController.addLabel(massageFromSever, vBox); 51 | } catch (IOException e) { 52 | e.printStackTrace(); 53 | System.out.println("Error receiving message from the Sever"); 54 | closeEverything(socket, bufferedReader, bufferedWriter); 55 | break; 56 | } 57 | } 58 | 59 | } 60 | }).start(); 61 | } 62 | 63 | public void closeEverything(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) { 64 | try { 65 | if (bufferedReader != null) { 66 | bufferedReader.close(); 67 | } 68 | if (bufferedWriter != null) { 69 | bufferedWriter.close(); 70 | } 71 | if (socket != null) { 72 | socket.close(); 73 | } 74 | } catch (IOException e) { 75 | e.printStackTrace(); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/model/Server.java: -------------------------------------------------------------------------------- 1 | package com.Nimesh.sokectProgramming.model; 2 | 3 | import com.Nimesh.sokectProgramming.controller.SeverManagemantController; 4 | import javafx.scene.layout.VBox; 5 | 6 | import java.io.*; 7 | import java.net.ServerSocket; 8 | import java.net.Socket; 9 | 10 | /** 11 | * @author : Nimesh Piyumantha 12 | * @since : 0.1.0 13 | **/ 14 | public class Server { 15 | 16 | private ServerSocket serverSocket; 17 | private Socket socket; 18 | private BufferedReader bufferedReader; 19 | private BufferedWriter bufferedWriter; 20 | 21 | public Server(ServerSocket serverSocket) { 22 | try { 23 | this.serverSocket = serverSocket; 24 | this.socket = serverSocket.accept(); 25 | this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 26 | this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 27 | } catch (IOException e) { 28 | e.printStackTrace(); 29 | System.out.println("Error creating server."); 30 | closeEverything(socket, bufferedReader, bufferedWriter); 31 | } 32 | } 33 | 34 | public void sendMassageClient(String messageToClient) { 35 | try { 36 | bufferedWriter.write(messageToClient); 37 | bufferedWriter.newLine(); 38 | bufferedWriter.flush(); 39 | } catch (IOException e) { 40 | e.printStackTrace(); 41 | System.out.println("Error sending message to the client"); 42 | closeEverything(socket, bufferedReader, bufferedWriter); 43 | } 44 | } 45 | 46 | public void receiveMassageFromClient(VBox vBox) { 47 | new Thread(new Runnable() { 48 | @Override 49 | public void run() { 50 | while (socket.isConnected()) { 51 | try { 52 | 53 | 54 | String massageFromClient = bufferedReader.readLine(); 55 | SeverManagemantController.addLabel(massageFromClient, vBox); 56 | } catch (IOException e) { 57 | e.printStackTrace(); 58 | System.out.println("Error receiving message from the client"); 59 | closeEverything(socket, bufferedReader, bufferedWriter); 60 | break; 61 | } 62 | } 63 | 64 | } 65 | }).start(); 66 | } 67 | 68 | public void closeEverything(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) { 69 | try { 70 | if (bufferedReader != null) { 71 | bufferedReader.close(); 72 | } 73 | if (bufferedWriter != null) { 74 | bufferedWriter.close(); 75 | } 76 | if (socket != null) { 77 | socket.close(); 78 | } 79 | } catch (IOException e) { 80 | e.printStackTrace(); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/com/Nimesh/sokectProgramming/views/SeverManagemant.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |