How to identify the input for the server is of InputStream or Output stream

622 Views Asked by At

I have a ServerSocket and looking for help.
I want to identify the request from the client of type InputStream or OutputStream. I am stuck with this point and looking forward to your help

ServerSocket servsock = new ServerSocket(13267);
while (true) {
     System.out.println("Waiting...");

     Socket sock = servsock.accept();
     System.out.println("Accepted connection : " + sock);

     InputStream is = sock.getInputStream();
     new FileServer().receiveFile(is);
     sock.close();
 }

Please tell me how can I put it in a conditional statement to provide the further execution

2

There are 2 best solutions below

3
On BEST ANSWER

From the server side, the Socket (created by ServerSocket when a client connection is accepted) allows to read(receive) stream from the client with the input stream and to write(send) stream to the client with the output stream.

From the client side, it works with the same logic.
The Socket allows to read(receive) stream from the server with the input stream and to write(send) stream to the server with the output stream.

In your actual code :

 Socket sock = servsock.accept();
 InputStream is = sock.getInputStream();

Here you get the input stream of the server.
With it you can read message from the client.
For example to read a byte sent by the client (of course to read lines, using a more featured reader such as BufferedReader is much better):

int b = is.read();

To write to the client one byte, the server can do :

 OutputStream os = sock.getOutputStream();
 os.write(oneByte);

Here, same remark as for InputStream : OutputStream has only raw methods to write bytes.
Using a specific subclass could be better according to your requirements.

You have very good materials and examples on the Oracle site : http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

0
On

You need to read from the socket to identify which operation the client socket is performing.

Eg. Client sends PUT Filename

Server reads from the input stream and save the file in the file server

Client sends GET Filename

Server reads Filename from the input stream and writes the file to the outputstream

So it depends on the protocol you are choosing