In Java networking, various methods are used to establish communication between two or more devices across a network. Here are the most common types:
1.Socket Programming (TCP/IP)
Definition:
- Socket programming is based on the TCP/IP protocol, which provides reliable, connection-oriented communication between a client and a server. The server listens for incoming connections, and the client initiates the connection.
Example
[pastacode lang=”java” manual=”%2F%2F%20Server%20(run%20first)%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20Server%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20IOException%20%7B%0A%20%20%20%20%20%20%20%20ServerSocket%20serverSocket%20%3D%20new%20ServerSocket(8080)%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Server%20started%2C%20waiting%20for%20client…%22)%3B%0A%20%20%20%20%20%20%20%20Socket%20socket%20%3D%20serverSocket.accept()%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Client%20connected%22)%3B%0A%0A%20%20%20%20%20%20%20%20BufferedReader%20in%20%3D%20new%20BufferedReader(new%20InputStreamReader(socket.getInputStream()))%3B%0A%20%20%20%20%20%20%20%20String%20clientMessage%20%3D%20in.readLine()%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Client%20says%3A%20%22%20%2B%20clientMessage)%3B%0A%0A%20%20%20%20%20%20%20%20PrintWriter%20out%20%3D%20new%20PrintWriter(socket.getOutputStream()%2C%20true)%3B%0A%20%20%20%20%20%20%20%20out.println(%22Hello%20from%20Server%22)%3B%0A%0A%20%20%20%20%20%20%20%20socket.close()%3B%0A%20%20%20%20%20%20%20%20serverSocket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Client%20(run%20second)%0Aimport%20java.io.*%3B%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20Client%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20IOException%20%7B%0A%20%20%20%20%20%20%20%20Socket%20socket%20%3D%20new%20Socket(%22localhost%22%2C%208080)%3B%0A%20%20%20%20%20%20%20%20PrintWriter%20out%20%3D%20new%20PrintWriter(socket.getOutputStream()%2C%20true)%3B%0A%20%20%20%20%20%20%20%20out.println(%22Hello%20Server%22)%3B%0A%0A%20%20%20%20%20%20%20%20BufferedReader%20in%20%3D%20new%20BufferedReader(new%20InputStreamReader(socket.getInputStream()))%3B%0A%20%20%20%20%20%20%20%20String%20serverMessage%20%3D%20in.readLine()%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Server%20says%3A%20%22%20%2B%20serverMessage)%3B%0A%0A%20%20%20%20%20%20%20%20socket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
Output:
[pastacode lang=”java” manual=”Server%3A%0AServer%20started%2C%20waiting%20for%20client…%0AClient%20connected%0AClient%20says%3A%20Hello%20Server%0A%0AClient%3A%0AServer%20says%3A%20Hello%20from%20Server%0A” message=”” highlight=”” provider=”manual”/]Advantages:
- Provides reliable and ordered communication.
- Connection-oriented, meaning that both sides ensure data is received correctly.
Uses:
- Web servers and web browsers.
- Remote command execution.
- File transfer between client and server.
2.Datagram (UDP) Programming
Definition:
- Datagram programming uses the UDP (User Datagram Protocol), which is connectionless and does not guarantee the delivery or ordering of packets. It’s faster but less reliable than TCP.
Example:
[pastacode lang=”java” manual=”%2F%2F%20Server%20(run%20first)%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20UDPServer%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20DatagramSocket%20serverSocket%20%3D%20new%20DatagramSocket(9876)%3B%0A%20%20%20%20%20%20%20%20byte%5B%5D%20receiveData%20%3D%20new%20byte%5B1024%5D%3B%0A%20%20%20%20%20%20%20%20DatagramPacket%20receivePacket%20%3D%20new%20DatagramPacket(receiveData%2C%20receiveData.length)%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Server%20waiting%20for%20data…%22)%3B%0A%20%20%20%20%20%20%20%20serverSocket.receive(receivePacket)%3B%0A%20%20%20%20%20%20%20%20String%20message%20%3D%20new%20String(receivePacket.getData()%2C%200%2C%20receivePacket.getLength())%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Received%20from%20client%3A%20%22%20%2B%20message)%3B%0A%20%20%20%20%20%20%20%20serverSocket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Client%20(run%20second)%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20UDPClient%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20DatagramSocket%20clientSocket%20%3D%20new%20DatagramSocket()%3B%0A%20%20%20%20%20%20%20%20InetAddress%20IPAddress%20%3D%20InetAddress.getByName(%22localhost%22)%3B%0A%20%20%20%20%20%20%20%20byte%5B%5D%20sendData%20%3D%20%22Hello%20UDP%20Server%22.getBytes()%3B%0A%20%20%20%20%20%20%20%20DatagramPacket%20sendPacket%20%3D%20new%20DatagramPacket(sendData%2C%20sendData.length%2C%20IPAddress%2C%209876)%3B%0A%20%20%20%20%20%20%20%20clientSocket.send(sendPacket)%3B%0A%20%20%20%20%20%20%20%20clientSocket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
Output:
[pastacode lang=”java” manual=”Server%3A%0AServer%20waiting%20for%20data…%0AReceived%20from%20client%3A%20Hello%20UDP%20Server%0A” message=”” highlight=”” provider=”manual”/]Advantages:
- Faster than TCP since it has no overhead for establishing connections.
- Suitable for time-sensitive applications.
Uses:
- Real-time gaming.
- Video streaming.
- Voice-over-IP (VoIP).
3.URL (Uniform Resource Locator)
Definition:
- A URL is used to identify resources on the internet. The URL class in Java provides methods to fetch data from web resources over HTTP or HTTPS.
Example:
[pastacode lang=”java” manual=”import%20java.io.*%3B%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20URLExample%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20URL%20url%20%3D%20new%20URL(%22https%3A%2F%2Fwww.example.com%22)%3B%0A%20%20%20%20%20%20%20%20BufferedReader%20in%20%3D%20new%20BufferedReader(new%20InputStreamReader(url.openStream()))%3B%0A%20%20%20%20%20%20%20%20String%20inputLine%3B%0A%20%20%20%20%20%20%20%20while%20((inputLine%20%3D%20in.readLine())%20!%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20System.out.println(inputLine)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20in.close()%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]Output:
[pastacode lang=”java” manual=”(Displays%20the%20HTML%20content%20of%20the%20webpage%3A%20%22https%3A%2F%2Fwww.example.com%22)” message=”” highlight=”” provider=”manual”/]Advantages:
- Easy to interact with web resources.
- Can handle different protocols like HTTP, HTTPS, and FTP.
Uses:
- Web scraping.
- Fetching content from APIs.
- Downloading files from the internet.
4.Multicast
Definition:
- Multicasting allows sending data to multiple recipients simultaneously using the UDP protocol. Java supports multicast communication using the MulticastSocket class.
Example:
[pastacode lang=”java” manual=”%2F%2F%20Sender%0Aimport%20java.net.*%3B%0Apublic%20class%20MulticastSender%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20MulticastSocket%20socket%20%3D%20new%20MulticastSocket()%3B%0A%20%20%20%20%20%20%20%20InetAddress%20group%20%3D%20InetAddress.getByName(%22230.0.0.1%22)%3B%0A%20%20%20%20%20%20%20%20byte%5B%5D%20message%20%3D%20%22Hello%20Multicast%20Group%22.getBytes()%3B%0A%20%20%20%20%20%20%20%20DatagramPacket%20packet%20%3D%20new%20DatagramPacket(message%2C%20message.length%2C%20group%2C%206789)%3B%0A%20%20%20%20%20%20%20%20socket.send(packet)%3B%0A%20%20%20%20%20%20%20%20socket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Receiver%0Aimport%20java.net.*%3B%0A%0Apublic%20class%20MulticastReceiver%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20MulticastSocket%20socket%20%3D%20new%20MulticastSocket(6789)%3B%0A%20%20%20%20%20%20%20%20InetAddress%20group%20%3D%20InetAddress.getByName(%22230.0.0.1%22)%3B%0A%20%20%20%20%20%20%20%20socket.joinGroup(group)%3B%0A%20%20%20%20%20%20%20%20byte%5B%5D%20buffer%20%3D%20new%20byte%5B1000%5D%3B%0A%20%20%20%20%20%20%20%20DatagramPacket%20packet%20%3D%20new%20DatagramPacket(buffer%2C%20buffer.length)%3B%0A%20%20%20%20%20%20%20%20socket.receive(packet)%3B%0A%20%20%20%20%20%20%20%20String%20message%20%3D%20new%20String(packet.getData()%2C%200%2C%20packet.getLength())%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22Received%3A%20%22%20%2B%20message)%3B%0A%20%20%20%20%20%20%20%20socket.leaveGroup(group)%3B%0A%20%20%20%20%20%20%20%20socket.close()%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]Output:
[pastacode lang=”java” manual=”Receiver%3A%0AReceived%3A%20Hello%20Multicast%20Group%0A” message=”” highlight=”” provider=”manual”/]
Advantages:
- Efficient for sending data to multiple recipients without duplication.
- Reduces bandwidth usage for large-scale broadcasting.
Uses:
- Video conferencing.
- Live streaming.
- Distributed systems.
5.Remote Method Invocation (RMI)
Definition:
- Remote Method Invocation (RMI) enables a Java program to invoke methods of objects residing on different JVMs. It allows distributed applications to communicate and share resources across the network.
Example:
[pastacode lang=”java” manual=”%2F%2F%20Interface%20(shared%20by%20both%20client%20and%20server)%0Aimport%20java.rmi.*%3B%0A%0Apublic%20interface%20MyRemote%20extends%20Remote%20%7B%0A%20%20%20%20String%20sayHello()%20throws%20RemoteException%3B%0A%7D%0A%0A%2F%2F%20Server%0Aimport%20java.rmi.*%3B%0Aimport%20java.rmi.server.*%3B%0A%0Apublic%20class%20MyRemoteImpl%20extends%20UnicastRemoteObject%20implements%20MyRemote%20%7B%0A%20%20%20%20public%20MyRemoteImpl()%20throws%20RemoteException%20%7B%7D%0A%20%20%20%20public%20String%20sayHello()%20%7B%0A%20%20%20%20%20%20%20%20return%20%22Hello%20from%20Server%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Naming.rebind(%22RemoteHello%22%2C%20new%20MyRemoteImpl())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20System.out.println(%22Server%20ready%22)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(Exception%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Client%0Aimport%20java.rmi.*%3B%0A%0Apublic%20class%20MyRemoteClient%20%7B%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20MyRemote%20service%20%3D%20(MyRemote)%20Naming.lookup(%22rmi%3A%2F%2Flocalhost%2FRemoteHello%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20System.out.println(service.sayHello())%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(Exception%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]Output:
[pastacode lang=”java” manual=”Server%3A%0AServer%20ready%0A%0AClient%3A%0AHello%20from%20Server%0A” message=”” highlight=”” provider=”manual”/]Advantages:
- Allows seamless method calls over a network, making remote objects behave like local ones.
- Simplifies distributed application development.
Uses:
- Distributed applications.
- Remote database access.
- Enterprise-level applications.