Data streams import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); } } Object streams When multiple object streams are used, input streams have to be initialized in the same order as output streams because ObjectOutputStream sends a header to the other party and ObjectInputStream blocks execution until it reads the header. import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); } } Order as specified in the code above might be easier to remember - first initialize output streams then input streams in the same order. However, another order for initialization of object streams is the following: ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream());

Order as specified in the code above might be easier to remember - first initialize output streams then input streams in the same order. However, another order for initialization of object streams is the following:

Data streams Using data streams, serialization is done by converting objects into primitive data types or a String. In this case, String is converted to byte[] instead of written using writeBytes() method to show how it would be done with other objects, such as images or other files. import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); byte[] messageOut = “Hello World”. getBytes(); } } Object streams import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); String messageOut = “Hello World”; } }

Data streams Length of a message needs to be sent first so the other party knows how many bytes it needs to read. After the length is sent as a primitive integer type, bytes can be sent. import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); byte[] messageOut = “Hello World”. getBytes(); clientOut. writeInt(messageOut. length); clientOut. write(messageOut); clientOut. flush(); } } Object streams import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); String messageOut = “Hello World”; clientOut. writeObject(messageOut); clientOut. flush(); } }

Data streams import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); byte[] messageOut = “Hello World”. getBytes(); clientOut. writeInt(messageOut. length); clientOut. write(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + new String(messageOut)); } } Object streams import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); String messageOut = “Hello World”; clientOut. writeObject(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + messageOut); } }

Data streams As length was sent first and bytes afterward, reading has to be done in the same order. In case length is zero, there is nothing to read. Object is deserialized when bytes are converted back into an instance, in this case, of String. import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); byte[] messageOut = “Hello World”. getBytes(); clientOut. writeInt(messageOut. length); clientOut. write(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + new String(messageOut)); int length = serverIn. readInt(); if (length > 0) { byte[] messageIn = new byte[length]; serverIn. readFully(messageIn, 0, messageIn. length); } } } Object streams import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); String messageOut = “Hello World”; clientOut. writeObject(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + messageOut); String messageIn = (String) serverIn. readObject(); } }

Data streams import java. io. DataInputStream; import java. io. DataOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); DataOutputStream clientOut = new DataOutputStream(client. getOutputStream()); DataInputStream clientIn = new DataInputStream(client. getInputStream()); DataOutputStream serverOut = new DataOutputStream(connection. getOutputStream()); DataInputStream serverIn = new DataInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); byte[] messageOut = “Hello World”. getBytes(); clientOut. writeInt(messageOut. length); clientOut. write(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + new String(messageOut)); int length = serverIn. readInt(); if (length > 0) { byte[] messageIn = new byte[length]; serverIn. readFully(messageIn, 0, messageIn. length); System. out. println(“Message received from client: " + new String(messageIn)); } } } Object streams import java. io. ObjectInputStream; import java. io. ObjectOutputStream; import java. net. InetAddress; import java. net. ServerSocket; import java. net. Socket; public class NetworkAppExample { public static void main(String[] args) throws Exception { String host = “localhost”; int port = 10430; ServerSocket server = new ServerSocket(port, 50, InetAddress. getByName(host)); System. out. println(“Server started. “); Socket client = new Socket(host, port); System. out. println(“Connecting to server. . . “); Socket connection = server. accept(); System. out. println(“Connection established. “); ObjectOutputStream clientOut = new ObjectOutputStream(client. getOutputStream()); ObjectOutputStream serverOut = new ObjectOutputStream(connection. getOutputStream()); ObjectInputStream clientIn = new ObjectInputStream(client. getInputStream()); ObjectInputStream serverIn = new ObjectInputStream(connection. getInputStream()); System. out. println(“Communication is ready. “); String messageOut = “Hello World”; clientOut. writeObject(messageOut); clientOut. flush(); System. out. println(“Message sent to server: " + messageOut); String messageIn = (String) serverIn. readObject(); System. out. println(“Message received from client: " + messageIn); } }

In case your output is not like the one above, which is unlikely to happen, there are a few solutions: