Socket communication in Java enables communication between two endpoints over a network. There are two main types of sockets: TCP sockets and UDP sockets. Let's explain both types with examples:
TCP Socket Communication:
1. **Server Side**:
- The server creates a `ServerSocket` object to listen for incoming connections on a specific port.
- When a client connects, the server accepts the connection and creates a `Socket` object to communicate with the client.
- The server reads from and writes to the socket's input and output streams to communicate with the client.
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server started. Waiting for client...");
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String message = in.readLine();
System.out.println("Client says: " + message);
out.println("Hello from server!");
clientSocket.close();
serverSocket.close();
}
}
2. Client Side:
- The client creates a `Socket` object and connects to the server using its IP address and port number.
- The client communicates with the server by reading from and writing to the socket's input and output streams.
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Hello from client!");
String response = in.readLine();
System.out.println("Server response: " + response);
socket.close();
}
}
UDP Socket Communication:
1. Server Side:
- The server creates a `DatagramSocket` object to send and receive datagrams (packets) over the network.
- The server listens for incoming datagrams on a specific port.
- The server processes incoming datagrams and sends response datagrams if necessary.
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket serverSocket = new DatagramSocket(12345);
byte[] receiveData = new byte[1024];
byte[] sendData;
System.out.println("Server started. Waiting for client...");
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String message = new String(receivePacket.getData()).trim();
System.out.println("Client says: " + message);
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
sendData = "Hello from server!".getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
serverSocket.send(sendPacket);
serverSocket.close();
}
}
2. Client Side:
- The client creates a `DatagramSocket` object to send and receive datagrams.
- The client sends datagrams to the server's IP address and port number.
- The client receives response datagrams from the server.
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress serverAddress = InetAddress.getByName("localhost");
int serverPort = 12345;
byte[] sendData = "Hello from client!".getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
clientSocket.send(sendPacket);
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String response = new String(receivePacket.getData()).trim();
System.out.println("Server response: " + response);
clientSocket.close();
}
}
Conclusion:
Socket communication in Java allows for the exchange of data between two endpoints over a network. TCP sockets provide reliable, connection-oriented communication, while UDP sockets offer lightweight, connectionless communication. Understanding socket programming is essential for developing networked applications in Java.
Comments
Post a Comment