Java Networking
Building network applications and client-server communication
🌐 What is Java Networking?
Java Networking enables applications to communicate over networks using sockets, URLs, and protocols. It provides APIs for creating client-server applications, web services, and distributed systems with reliable data exchange.
// Simple Socket Client
import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8080);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out.println("Hello Server!");
String response = in.readLine();
System.out.println("Server says: " + response);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output:
Server says: Hello Client! Message received.
Key Networking Concepts
Sockets
Endpoints for network communication
Socket client = new Socket("host", port);
ServerSocket server = new ServerSocket(port);
URL Connection
Connect to web resources
URL url = new URL("http://example.com");
URLConnection conn = url.openConnection();
TCP/UDP
Reliable and fast protocols
// TCP: Socket, ServerSocket
// UDP: DatagramSocket, DatagramPacket
Streams
Data input/output over network
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
🔹 TCP Socket Programming
Creating client-server applications with TCP sockets:
🔸 Server Side
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
// Create server socket on port 8080
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Server started on port 8080");
while (true) {
// Wait for client connection
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
// Create input/output streams
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(
clientSocket.getOutputStream(), true);
// Read message from client
String message = in.readLine();
System.out.println("Received: " + message);
// Send response to client
out.println("Echo: " + message);
// Close client connection
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
🔸 Client Side
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class TCPClient {
public static void main(String[] args) {
try {
// Connect to server
Socket socket = new Socket("localhost", 8080);
System.out.println("Connected to server");
// Create input/output streams
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
// Get user input
Scanner scanner = new Scanner(System.in);
System.out.print("Enter message: ");
String message = scanner.nextLine();
// Send message to server
out.println(message);
// Read response from server
String response = in.readLine();
System.out.println("Server response: " + response);
// Close connection
socket.close();
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
🔹 UDP Socket Programming
Fast, connectionless communication with UDP:
🔸 UDP Server
import java.net.*;
public class UDPServer {
public static void main(String[] args) {
try {
// Create UDP socket
DatagramSocket socket = new DatagramSocket(9876);
byte[] buffer = new byte[1024];
System.out.println("UDP Server started on port 9876");
while (true) {
// Receive packet from client
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received: " + message);
// Send response back to client
String response = "Echo: " + message;
byte[] responseData = response.getBytes();
DatagramPacket responsePacket = new DatagramPacket(
responseData, responseData.length,
packet.getAddress(), packet.getPort());
socket.send(responsePacket);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
🔸 UDP Client
import java.net.*;
import java.util.Scanner;
public class UDPClient {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket();
InetAddress address = InetAddress.getByName("localhost");
Scanner scanner = new Scanner(System.in);
System.out.print("Enter message: ");
String message = scanner.nextLine();
// Send message to server
byte[] data = message.getBytes();
DatagramPacket packet = new DatagramPacket(
data, data.length, address, 9876);
socket.send(packet);
// Receive response from server
byte[] buffer = new byte[1024];
DatagramPacket responsePacket = new DatagramPacket(buffer, buffer.length);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
System.out.println("Server response: " + response);
socket.close();
scanner.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
🔹 URL and HTTP Connections
Connecting to web resources and APIs:
import java.io.*;
import java.net.*;
public class URLExample {
// Simple GET request
public static void httpGet(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Set request method
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", "Java Application");
// Get response code
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Read response
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line).append("\n");
}
reader.close();
System.out.println("Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
// POST request with data
public static void httpPost(String urlString, String postData) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Set request method and properties
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
// Send POST data
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(postData);
writer.flush();
writer.close();
// Read response
int responseCode = connection.getResponseCode();
System.out.println("POST Response Code: " + responseCode);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
httpGet("https://api.github.com/users/octocat");
httpPost("https://httpbin.org/post", "{\"name\":\"John\",\"age\":30}");
}
}