WriteObjectsFromSocket.java Source code

Java tutorial

Introduction

Here is the source code for WriteObjectsFromSocket.java

Source

// WriteObjectsFromSocket - Read Objects from a Socket and save them
//
// Copyright (C) 1996 by Rinaldo Di Giorgio <rinaldo@digiorgio.com>.  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");
    }
}