As we have already seen, how to write UDP socket programs in JAVA , now we will write a sample TCP client and server in java. $ vim TcpReceiverServer.java import java.net.*; import java.io.*; public class TcpReceiverServer extends Thread { private static int remoteServerPort = 5555; private ServerSocket localServerSocket = null; public TcpReceiverServer() { try { localServerSocket = new ServerSocket(remoteServerPort); } catch (Exception e) { e.printStackTrace(); } } public void run() { while(true) { try { System.out.println("Waiting for client on port " + localServerSocket.getLocalPort() + "..."); Socket server = localServerSocket.accept(); System.out.println("connected to remote client " + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("Response/Ack to your data received at server : " + server.getLocalSocketAddress() + "\nThank You!"); server.close(); } catch (SocketTimeoutException s) { System.out.println("Socket timed out!"); break; } catch (IOException e) { e.printStackTrace(); break; } } } public static void main(String[] args) throws Exception { TcpReceiverServer tcpReceiverServer = new TcpReceiverServer(); tcpReceiverServer.start(); } } Now, lets compile the run the server in one terminal as, $ javac TcpReceiverServer.java $ java TcpReceiverServer Waiting for client on port 5555... Here, server will be started and it will start listening on a port as defined in source (i.e.
Implementation details
5555 ) , you can use any other port which is free. Now, open another terminal and start the client as, $ vim TcpSenderClient.java import java.net.*; import java.io.*; public class TcpSenderClient { private static String remoteServerAddr = "192.168.1.100"; private static int remoteServerPort = 5555; public static void main(String[] args) throws Exception { InetAddress remoteServerInetAddr = InetAddress.getByName(remoteServerAddr); Socket localSocket = new Socket(remoteServerInetAddr, remoteServerPort); String message = "This is string sent from TcpSenderClient"; System.out.println("Connected to remote client: " + localSocket.getRemoteSocketAddress()); OutputStream outToServer = localSocket.getOutputStream(); //pointer to stream which can send data to server DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF(message + " : " + localSocket.getLocalSocketAddress()); //data to send to server InputStream inFromServer = localSocket.getInputStream(); //pointer to stream which can receive data from server DataInputStream in = new DataInputStream(inFromServer); System.out.println("Server sent us reply as: " + in.readUTF()); //data received from server localSocket.close(); } } $ javac TcpSenderClient.java Now start the client as below, and as shown in received message, it attempted a connection to server IP as mentioned in source, sent a string and received a response from server. $ java TcpSenderClient Connected to remote client: /192.168.1.100:5555 Server sent us reply as: Response/Ack to your data received at server : /192.168.1.100:5555 Thank You! Now, As soon you started the client, on server side, it will receive a connection from client, receive a string from client and send a reply to client as seen below, $ java TcpReceiverServer Waiting for client on port 5555... connected to remote client /192.168.1.100:36940 This is string sent from TcpSenderClient : /192.168.1.100:36940 Waiting for client on port 5555...
Gotchas and common issues
Permission checks - verify user access rights and sudo privileges before executing system-level operations.
Environment configuration - double-check path variables and dependency versions to prevent runtime failures.
Backup safeguards - maintain configuration backups before applying system or database modifications.
Following these steps ensures clean configuration and reliable execution for socket programming in java – tcp client and server.
Comments and corrections