public class SerProg {
static ServerSocket ser=null;
static Socket cli=null;
static ObjectInputStream ins=null;
static ObjectOutputStream outs=null;
public static void main(String[] args) {
try {
ser=new ServerSocket(9000,10);
cli=ser.accept();
System.out.println("Connected to :"+cli.getInetAddress().getHostAddress()+" At Port :"+cli.getLocalPort());
ins=new ObjectInputStream(cli.getInputStream());
outs=new ObjectOutputStream(cli.getOutputStream());
String str=(String)ins.readObject();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
And the Client
public class SerProg {
/**
* @param args
*/
static ServerSocket ser=null;
static Socket cli=null;
static ObjectInputStream ins=null;
static ObjectOutputStream outs=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ser=new ServerSocket(9000,10);
cli=ser.accept();
System.out.println("Connected to :"+cli.getInetAddress().getHostAddress()+" At Port :"+cli.getLocalPort());
ins=new ObjectInputStream(cli.getInputStream());
outs=new ObjectOutputStream(cli.getOutputStream());
String str=(String)ins.readObject();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
The Connection is established successfully but in the Server Code Line
ins=new ObjectInputStream(cli.getInputStream());
the code halts and does not proceed,what might be the problem ??
You need to create the
ObjectOutputStreambefore theObjectInputStreamat both sides of the connection(!). When theObjectInputStreamis created, it tries to read the object stream header from theInputStream. So if theObjectOutputStreamon the other side hasn’t been created yet there is no object stream header to read, and it will block indefinitely.Or phrased differently: If both sides first construct the
ObjectInputStream, both will block trying to read the object stream header, which won’t be written until theObjectOutputStreamhas been created (on the other side of the line); which will never happen because both sides are blocked in the constructor ofObjectInputStream.This can be inferred from the Javadoc of
ObjectInputStream(InputStream in):This is also described in section 3.6.2 of Fundamental networking in Java by Esmond Pitt.