Network Protocol Java

// WriteObjectsFromSocket - Read Objects from a Socket and save them
//
// Copyright (C) 1996 by Rinaldo Di Giorgio .  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
/*
 *  Accept a connection and read some serialized
 *  data until the stream is closed. Once it is closed
 *  write the data to a disk file.
 *  This program always writes to /tmp/Object.
 */
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 */
class WriteObjectsFromSocket {
  public static void main(String args[]) {
    Socket rs;
    ServerSocket s;
    int PortNumber = 2000; // Fixed port
    boolean acceptLoop = true;
    ReaderWriter readerwriter = null;
    System.out.println("WriteFileFromSocket Running");
    // ////////////////////////////////////////////////////////////////
    // Open a socket on this server and listen for a connection
    // Look for data if we get here that is requests
    // ////////////////////////////////////////////////////////////////
    try {
      System.out.println("Waiting to accept connection");
      s = new ServerSocket(PortNumber);
    } catch (Exception e) {
      System.out.println("Unable to open port" + PortNumber);
      return;
    }
    while (acceptLoop) {
      try {
        rs = s.accept(); // Accept connections
      } catch (Exception e) {
        System.out.println("Accept failed port" + PortNumber);
        return;
      }
      readerwriter = new ReaderWriter(rs); // Start a thread to read the input
    }
  }
}
/**
 * Manage the writing of the file being read from a client
 */
class ReaderWriter extends Thread {
  byte b[] = null;
  int inputByte = 0;
  String directory = null;
  String filename = null;
  DataInputStream is;
  FileOutputStream localFile = null;
  boolean writeloop = true;
  ReaderWriter(Socket rs) {
    // /////////////////////////////////////////////
    // Open a remote stream to the client
    // /////////////////////////////////////////////
    try {
      is = new DataInputStream(rs.getInputStream());
    } catch (Exception e) {
      System.out.println("Unable to get Stream");
      return;
    }
    // /////////////////////////////////////////////
    // Open the file that is to be written to
    // /////////////////////////////////////////////
    try {
      File theFile = new File("/tmp", "Objects");
      System.out.println("The file to be created or overwritten: " + theFile);
      localFile = new FileOutputStream(theFile);
    } catch (IOException e) {
      System.out.println("Open error " + e);
      return;
    }
    // ///////////////////////////////////////////
    // Look for all the double data constantly
    // ///////////////////////////////////////////
    while (writeloop) {
      // Look for data if we get here that is requests
      try {
        inputByte = is.readByte(); // Not the best way to do it
        // Consider looking for available bytes
        // and reading that amount.
      } catch (IOException e) {
        System.out.println("In the read loop:" + e);
        writeloop = false;
      }
      // ///////////////////////////
      // We did get something
      // Write The Data
      // ///////////////////////////
      try {
        localFile.write(inputByte);
      } catch (IOException e) {
        System.out.println("Write failed");
        writeloop = false;
      }
    }
    // ////////////////////////////////
    // Close the connection and file
    // ////////////////////////////////
    try {
      rs.close();
      is.close();
      localFile.close();
    } catch (Exception e) {
      System.out.println("Unable to close ");
    }
    System.out.println("Thread exiting");
  }
}