ojhawkins
ojhawkins

Reputation: 3298

Send request line + File using Sockets - java

I am trying to send a "request line" and a file through a socket.

Client (sender)

Socket socket = new Socket(hostName, SOCKET_PORT);
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
FileInputStream fis = new FileInputStream(fileName);
os.writeBytes("PUT c:\dev\foo\helloworld.txt" + "\r\n")
byte[] buffer = new byte[1024];
int bytes;
while((bytes = fis.read(buffer)) != -1 ) {
    try {
        os.write(buffer, 0, bytes);
    } catch (IOException e) {e.printStackTrace();}
}

Sever (receiver)

ServerSocket serverSocket = new ServerSocket(SOCKET_PORT);
Socket clientSoc = serverSocket.accept();
InputStream inputStream = clientSoc.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String requestLine = bufferedReader.readLine();
File currentFile = (File)new ObjectInputStream(inputStream).readObject(); //This doesn't work
byteSequence = new byte[new Long(currentFile.length()).intValue()];
for(int i =0; i<currentFile.length();i++){
    byteSequence[i] = (byte)clientSoc.getInputStream().read();
} 
try {
    FileOutputStream newFile = new FileOutputStream(currentFile.getName());
    newFile.write(byteSequence,0, byteSequence.length);
} catch (IOException e) {e.printStackTrace();}

I am able to read the request line on the server but when I attempt to read the file it throws an exception (line below).

File currentFile = (File)new ObjectInputStream(inputStream).readObject(); 

java.io.Stream.CorruptedException:

java.io.StreamCorruptedException: invalid stream header: 0A48656C

What exactly am I doing wrong?

Upvotes: 1

Views: 304

Answers (1)

Rod_Algonquin
Rod_Algonquin

Reputation: 26198

You are trying to access an object that was not even passed to the socket.. you only passed a byte of string to the server but you never pass an Object to the server using the ObjectOutputStream..

Upvotes: 2

Related Questions