Hello,

I have written a  java client for the android and I have a java server
that runs on pc. the problem is when my file is sent to the pc the
file is read but ends up with size zero. Anyone got any ideas why.
Help is much appreciated. The code is shown below

Client:

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AndroidClient extends Activity {
    /** Called when the activity is first created. */
        public static TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);

        tv = new TextView(this);
        tv.setText("Main - client");
        setContentView(tv);

        Thread cThread = new Thread(new TCPClientTest());

        cThread.start();
    }
}

class TCPClientTest implements Runnable {


    public void run() {
         try {

           InetAddress serverAddr = InetAddress.getByName("10.0.2.2");

           Log.d("TCP", "C: Connecting...");
           Socket socket = new Socket(serverAddr, 4444);
           String message = "Hello from Client";
               try {



                Log.d("TCP", "C: Sending: '" + message + "'");
                PrintWriter out = new PrintWriter( new BufferedWriter
( new OutputStreamWriter(socket.getOutputStream())),true);

                out.println(message);
                Log.d("TCP", "C: Sent.");
                  Log.d("TCP", "C: Done.");

                  try {
                          Log.e("----", "C: waiting for return");
                      BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
                      String str = in.readLine();
                      System.out.println("S: Received: '" + str +
"'");
                      AndroidClient.tv.setText(str);
                    } catch(Exception e) {
                        System.out.println("S: Error");
                    } finally {
                         System.out.println("S: Done.");
                    }

                    File myFile = new File
(android.os.Environment.getExternalStorageDirectory().getPath() + "/
psi.pdf");

                    out.println((int)myFile.length());

                    byte [] mybytearray  = new byte [(int)myFile.length
()];
                    FileInputStream fis = new FileInputStream(myFile);
                    BufferedInputStream bis = new BufferedInputStream
(fis);
                    bis.read(mybytearray,0,mybytearray.length);
                    OutputStream os = socket.getOutputStream();
                    System.out.println("Sending...");
                    os.write(mybytearray,0,mybytearray.length);
                    os.flush();

                    os.close();
                    bis.close();
                    fis.close();

                    Log.d("----------", "File has read");

                    //FileOutputStream fos = new FileOutputStream
("sdcard/01 All My Life.m4a");

             } catch(Exception e) {
                 Log.e("TCP", "S: Error", e);
                } finally {
                  socket.close();
                }
         } catch (Exception e) {
              Log.e("TCP", "C: Error", e);
         }

    }
}

Server on pc

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class JavaServer {

        public static void main(String[] args){

                Thread sThread = new Thread(new TCPServerTest());

        sThread.start();
        }
}



class TCPServerTest implements Runnable{

    public static final String SERVERIP = "10.0.2.15";
    public static final int SERVERPORT = 4444;

    public void run() {
         try {
                 System.out.println("S: Connecting...");

                 String message2 = "Hahahahaha";

              ServerSocket serverSocket = new ServerSocket
(SERVERPORT);
              System.out.println("got past conect");
              while (true) {
                  System.out.println("got into loop");
                 Socket client = serverSocket.accept();
                 System.out.println("S: Receiving...");
                 try {
                      BufferedReader in = new BufferedReader(new
InputStreamReader(client.getInputStream()));
                      String str = in.readLine();
                      System.out.println("S: Received: '" + str +
"'");
                    } catch(Exception e) {
                        System.out.println("S: Error");
                    } finally {
                         System.out.println("S: Done.");
                    }
                   System.out.println("C: Sending: '" + message2 + "'");
                   PrintWriter out = new PrintWriter( new
BufferedWriter( new OutputStreamWriter(client.getOutputStream
())),true);

                   out.println(message2);
                   System.out.println("C: Sent.");

                   BufferedReader in = new BufferedReader(new
InputStreamReader(client.getInputStream()));
                   int filesize = Integer.parseInt(in.readLine());

                   System.out.println("The size is " + filesize);

                   int bytesRead;
                   int current = 0;
                   byte [] mybytearray  = new byte [filesize];
                   InputStream is = client.getInputStream();
                   FileOutputStream fos = new FileOutputStream(new File
("transfer.pdf"));
                   BufferedOutputStream bos = new BufferedOutputStream
(fos);
                   bytesRead = is.read(mybytearray,
0,mybytearray.length);
                   current = bytesRead;

                   do {
                       bytesRead =
                          is.read(mybytearray, current,
(mybytearray.length-current));
                       if(bytesRead >= 0) current += bytesRead;
                    } while(bytesRead > -1);

                    bos.write(mybytearray, 0 , current);
                    bos.flush();

                    bos.close();
                    is.close();
                    fos.close();

                   client.close();


              }

         } catch (Exception e) {
           System.out.println("S: Error");
         }
    }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to