Socket Programming in Java (UDP & TCP)
1. TCP Echo Client/Server
Code:
// EchoServer.java
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("Server started...");
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println("Echo: " + inputLine);
}
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
}
// EchoClient.java
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println(in.readLine());
}
out.close();
in.close();
stdIn.close();
socket.close();
}
}
Executed Output:
Server started...
Client: Hello
Socket Programming in Java (UDP & TCP)
Server: Echo: Hello
Socket Programming in Java (UDP & TCP)
2. UDP Time Client/Server
Code:
// UDPServer.java
import java.net.*;
import java.util.*;
public class UDPServer {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData;
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
if (sentence.equalsIgnoreCase("time")) {
String currentTime = new Date().toString();
sendData = currentTime.getBytes();
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
socket.send(sendPacket);
}
}
}
}
// UDPClient.java
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws Exception {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = "time".getBytes();
byte[] receiveData = new byte[1024];
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
Executed Output:
FROM SERVER: Sun May 11 12:45:30 IST 2025
Socket Programming in Java (UDP & TCP)
3. TCP Iterative Server
Code:
// IterativeServer.java
import java.io.*;
import java.net.*;
public class IterativeServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(5000);
System.out.println("Iterative Server started...");
while (true) {
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println("Processed: " + inputLine);
if (inputLine.equalsIgnoreCase("bye")) break;
}
in.close();
out.close();
clientSocket.close();
}
}
}
Executed Output:
Client connected...
Client: Hello
Server: Processed: Hello
Client: bye
Server: Processed: bye
Socket Programming in Java (UDP & TCP)
4. TCP Concurrent Server
Code:
// ConcurrentServer.java
import java.io.*;
import java.net.*;
public class ConcurrentServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(6000);
System.out.println("Concurrent Server started...");
while (true) {
Socket clientSocket = serverSocket.accept();
new Thread(new ClientHandler(clientSocket)).start();
}
}
}
class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println("Processed concurrently: " + inputLine);
if (inputLine.equalsIgnoreCase("bye")) break;
}
in.close();
out.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Executed Output:
Multiple clients handled in parallel
Client1: Hello -> Server: Processed concurrently: Hello
Socket Programming in Java (UDP & TCP)
5. Simple DNS Client/Server
Code:
// DNSServer.java
import java.net.*;
import java.io.*;
import java.util.HashMap;
public class DNSServer {
public static void main(String[] args) throws IOException {
DatagramSocket serverSocket = new DatagramSocket(7000);
byte[] receiveData = new byte[1024];
byte[] sendData;
HashMap<String, String> dnsTable = new HashMap<>();
dnsTable.put("google.com", "142.250.190.78");
dnsTable.put("example.com", "93.184.216.34");
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String domain = new String(receivePacket.getData(), 0, receivePacket.getLength());
String ip = dnsTable.getOrDefault(domain, "Domain not found");
sendData = ip.getBytes();
InetAddress clientAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, port);
serverSocket.send(sendPacket);
}
}
}
// DNSClient.java
import java.net.*;
public class DNSClient {
public static void main(String[] args) throws Exception {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = "google.com".getBytes();
byte[] receiveData = new byte[1024];
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 7000);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("FROM SERVER: " + response);
clientSocket.close();
}
}
Socket Programming in Java (UDP & TCP)
Executed Output:
FROM SERVER: 142.250.190.78