Client-Server Connection using
ObjectOutputStream & ObjectInputStream in JAVA.
In Client/Server applications the server normally listens to a specific port
waiting for connection requests from a client.
When a connection request arrives, the client and the server establish a
dedicated connection to communicate.
During the connection process, the client is assigned a local port number, and
binds a socket to it.
The client talks to the server by writing to the socket and gets information
from the server by reading from it.
Similarly, the server gets a new local port number to communicate with the
client.
The server also binds a socket to its local port and communicates with the
client by reading from and writing to it.
The server uses a specific port dedicated only to listening for connection
requests from other clients. It can not use this specific port for communication
with the clients.
The client and the server must agree on a protocol. They must agree on the
language of the information transferred back and forth through the socket.
The java.net package in the Java development environment provides the class
“Socket” which implements the client side and the class “ServerSocket” class
which implements the server side of the two-way link.
Server side
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();
}
}
}
Client Side
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();
}
}
Output