A socket
literally means an electrical
device receiving a plug or light bulb to make a connection. And in computer
programming it means a method of communication between two programs one acting
as the server (aka provider) and the other as the client (aka requester).
Why is Socket Programming required?
Socket programming is used when two machines need to exchange
information for example in cases of web browsers, instant messaging
applications and peer to peer file sharing systems. One of the machines
prepares the socket and sends it across to the other machine for it to return information
through this socket.
Socket Programming in Java
Socket Programming needs two processes, the provider and the
requester. The following two java files represent the same. You can play with
them to understand how simple exchange of messages occurs between the two.
Provider.java
import java.io.*;
import java.net.*;
public class Provider{
ServerSocket
providerSocket;
Socket
connection = null;
ObjectOutputStream
out;
ObjectInputStream
in;
String
message;
Provider(){}
void
run()
{
try{
//1.
creating a server socket
providerSocket
= new ServerSocket(2004, 10);
//2.
Wait for connection
System.out.println("Waiting
for connection");
connection
= providerSocket.accept();
System.out.println("Connection
received from " + connection.getInetAddress().getHostName());
//3.
get Input and Output streams
out
= new ObjectOutputStream(connection.getOutputStream());
out.flush();
in
= new ObjectInputStream(connection.getInputStream());
sendMessage("Connection
successful");
//4.
The two parts communicate via the input and output streams
do{
try{
message
= (String)in.readObject();
System.out.println("client>"
+ message);
if
(message.equals("bye"))
sendMessage("bye");
}
catch(ClassNotFoundException
classnot){
System.err.println("Data
received in unknown format");
}
}while(!message.equals("bye"));
}
catch(IOException
ioException){
ioException.printStackTrace();
}
finally{
//4:
Closing connection
try{
in.close();
out.close();
providerSocket.close();
}
catch(IOException
ioException){
ioException.printStackTrace();
}
}
}
void
sendMessage(String msg)
{
try{
out.writeObject(msg);
out.flush();
System.out.println("server>"
+ msg);
}
catch(IOException
ioException){
ioException.printStackTrace();
}
}
public
static void main(String args[])
{
Provider
server = new Provider();
while(true){
server.run();
}
}
}
|
Requester.java
import java.io.*;
import java.net.*;
public class Requester{
Socket
requestSocket;
ObjectOutputStream
out;
ObjectInputStream in;
String message;
Requester(){}
void
run()
{
try{
//1.
creating a socket to connect to the server
requestSocket
= new Socket("localhost", 2004);
System.out.println("Connected
to localhost in port 2004");
//2.
get Input and Output streams
out
= new ObjectOutputStream(requestSocket.getOutputStream());
out.flush();
in
= new ObjectInputStream(requestSocket.getInputStream());
//3:
Communicating with the server
do{
try{
message
= (String)in.readObject();
System.out.println("server>"
+ message);
sendMessage("Hi
my server");
message
= "bye";
sendMessage(message);
}
catch(ClassNotFoundException
classNot){
System.err.println("data
received in unknown format");
}
}while(!message.equals("bye"));
}
catch(UnknownHostException
unknownHost){
System.err.println("You
are trying to connect to an unknown host!");
}
catch(IOException
ioException){
ioException.printStackTrace();
}
finally{
//4:
Closing connection
try{
in.close();
out.close();
requestSocket.close();
}
catch(IOException
ioException){
ioException.printStackTrace();
}
}
}
void
sendMessage(String msg)
{
try{
out.writeObject(msg);
out.flush();
System.out.println("client>"
+ msg);
}
catch(IOException
ioException){
ioException.printStackTrace();
}
}
public
static void main(String args[])
{
Requester
client = new Requester();
client.run();
}
}
|
You can extend
these classes to much more complex use-cases. Hope this helped lay the
foundation.
No comments:
Post a Comment