diff --git a/core-java-networking/src/main/java/com/baeldung/socket/read/Client.java b/core-java-networking/src/main/java/com/baeldung/socket/read/Client.java index 08292237f2..5e2a84a767 100644 --- a/core-java-networking/src/main/java/com/baeldung/socket/read/Client.java +++ b/core-java-networking/src/main/java/com/baeldung/socket/read/Client.java @@ -1,35 +1,27 @@ package com.baeldung.socket.read; -import java.net.*; +import java.net.*; +import java.nio.charset.StandardCharsets; import java.io.*; public class Client { - - //Initialize socket, input and output stream - private Socket socket = null; - private DataInputStream in = null; - private DataOutputStream out = null; public void runClient(String ip, int port) { try { - socket = new Socket(ip, port); + Socket socket = new Socket(ip, port); System.out.println("Connected to server ..."); - in = new DataInputStream(System.in); - out = new DataOutputStream(socket.getOutputStream()); - } catch(Exception e) { - e.printStackTrace(); - } - char type = 's'; // s for string - int length = 29; - String data = "This is a string of length 29"; - byte[] dataInBytes = data.getBytes(); - //Sending data in TLV format - try { + DataInputStream in = new DataInputStream(System.in); + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + + char type = 's'; // s for string + int length = 29; + String data = "This is a string of length 29"; + byte[] dataInBytes = data.getBytes(StandardCharsets.UTF_8); + //Sending data in TLV format out.writeChar(type); out.writeInt(length); out.write(dataInBytes); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } diff --git a/core-java-networking/src/main/java/com/baeldung/socket/read/Server.java b/core-java-networking/src/main/java/com/baeldung/socket/read/Server.java index bdb3a4449f..2ab91c6cdc 100644 --- a/core-java-networking/src/main/java/com/baeldung/socket/read/Server.java +++ b/core-java-networking/src/main/java/com/baeldung/socket/read/Server.java @@ -1,48 +1,46 @@ package com.baeldung.socket.read; -import java.net.*; +import java.net.*; +import java.nio.charset.StandardCharsets; import java.io.*; public class Server { - - //Socket and input stream - private Socket socket = null; - private ServerSocket server = null; - private DataInputStream in = null; public void runServer(int port) { //Start the server and wait for connection try { - server = new ServerSocket(port); + ServerSocket server = new ServerSocket(port); System.out.println("Server Started. Waiting for connection ..."); - socket = server.accept(); + Socket socket = server.accept(); System.out.println("Got connection from client."); //Get input stream from socket variable and convert the same to DataInputStream - in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); + DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); //Read type and length of data char dataType = in.readChar(); int length = in.readInt(); System.out.println("Type : "+dataType); System.out.println("Lenght :"+length); - //Read String data in bytes - byte[] messageByte = new byte[length]; - boolean end = false; - String dataString = ""; - int totalBytesRead = 0; - //We need to run while loop, to read all data in that stream - while(!end) { - int currentBytesRead = in.read(messageByte); - totalBytesRead = currentBytesRead + totalBytesRead; - if(totalBytesRead <= length) { - dataString += new String(messageByte,0,currentBytesRead); - } else { - dataString += new String(messageByte,0,length - totalBytesRead + currentBytesRead); - } - if(dataString.length()>=length) { - end = true; + if(dataType == 's') { + //Read String data in bytes + byte[] messageByte = new byte[length]; + boolean end = false; + StringBuilder dataString = new StringBuilder(length); + int totalBytesRead = 0; + //We need to run while loop, to read all data in that stream + while(!end) { + int currentBytesRead = in.read(messageByte); + totalBytesRead = currentBytesRead + totalBytesRead; + if(totalBytesRead <= length) { + dataString.append(new String(messageByte,0,currentBytesRead,StandardCharsets.UTF_8)); + } else { + dataString.append(new String(messageByte,0,length - totalBytesRead + currentBytesRead,StandardCharsets.UTF_8)); + } + if(dataString.length()>=length) { + end = true; + } } + System.out.println("Read "+length+" bytes of message from client. Message = "+dataString); } - System.out.println("Read "+length+" bytes of message from client. Message = "+dataString);; } catch (Exception e) { e.printStackTrace(); }