// 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");
}
}