diff --git a/src/main/java/connect/src/TCPClient.java b/src/main/java/connect/src/TCPClient.java new file mode 100644 index 0000000..c805f1d --- /dev/null +++ b/src/main/java/connect/src/TCPClient.java @@ -0,0 +1,90 @@ +/** + * @author Aaron Moser + * @date 05.11.2023 + * @src https://www.geeksforgeeks.org/socket-programming-in-java/ + */ +package connect.src; + +import java.io.*; +import java.net.*; + +import org.json.JSONObject; + +public class TCPClient { + + private final int MIN_PORT = 1; + private final int MAX_PORT = 65535; + + private String ipAddress = "127.0.0.1"; + private int port = 65432; + private Socket socket = null; + private boolean useIPv6 = false; + + private DataOutputStream dataSentToServerStream = null; + + public TCPClient(String address, int port, boolean useIPv6) { + if ((null != address) && (MIN_PORT <= port) && (MAX_PORT >= port)) { + if (useIPv6) { + this.useIPv6 = useIPv6; + } else { + this.ipAddress = address; + this.port = port; + } + } else { + //TODO display error at gui + //TODO don't even allow at gui wrong inputs + //TODO sanitize input with regex + } + } + + public boolean connectToServer() { + boolean connectionEstablished = false; + try { + if (this.useIPv6) { + // If client wants to connect via ipv6 + InetAddress ipv6Address = InetAddress.getByName(this.ipAddress); + this.socket = new Socket(ipv6Address, this.port); + } else { + // If client wants to connect via ipv4 + this.socket = new Socket(this.ipAddress, this.port); + } + System.out.println("Connected to server with ip:" + this.ipAddress + " port:" + this.port); + connectionEstablished = true; + } + catch (UnknownHostException exception) { + System.out.println(exception); + } + catch (IOException exception) { + System.out.println(exception); + } + return connectionEstablished; + } + + public boolean sendData(String pathToInputFile) { + boolean dataSent = false; + try { + JSONObject file = new JSONObject(pathToInputFile); + // sends output to the socket + this.dataSentToServerStream = new DataOutputStream(this.socket.getOutputStream()); + this.dataSentToServerStream.writeUTF(file.toString()); + dataSent = true; + } + catch (IOException i) { + System.out.println(i); + } + return dataSent; + } + + public boolean closeConnection() { + boolean connectionClosed = false; + try { + dataSentToServerStream.close(); + socket.close(); + connectionClosed = true; + } + catch (IOException i) { + System.out.println(i); + } + return connectionClosed; + } +}