title: Android TCP send file. Android Client sends image to Java Server. Cant send the image. What to do?
body: <p>I am creating a simple app on Android SDK. I created an Android Client and Java Server. Now what I have created is that Android app browse for image from gallery and show the Path on the screen. Also, it displays the image, which was showed. To start the sending connection thing firstly I run the Java Server. Then I run the app on my phone. I choose the photo and then press send. The app fezzes after the push and forces to close. Below you can see my code. Any ideas?</p>
  
  <p>Android Client</p>
  
  <pre><code>package com.example.workingclient;
  
  import java.io.BufferedInputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.io.OutputStream;
  import java.net.Socket;
  import java.net.UnknownHostException;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.database.Cursor;
  import android.net.Uri;
  import android.os.Bundle;
  import android.provider.MediaStore;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.ImageView;
  import android.widget.TextView;
  
  public class SendfileActivity extends Activity {
      /** Called when the activity is first created. */
  
      private static final int SELECT_PICTURE = 1;
  
      private String selectedImagePath;
      private ImageView img;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          System.out.println("34");
          img = (ImageView) findViewById(R.id.ivPic);
          System.out.println("36");
          ((Button) findViewById(R.id.bBrowse))
                  .setOnClickListener(new OnClickListener() {
                      public void onClick(View arg0) {
                          System.out.println("40");
                          Intent intent = new Intent();
                          intent.setType("image/*");
                          intent.setAction(Intent.ACTION_GET_CONTENT);
                          startActivityForResult(
                                  Intent.createChooser(intent, "Select Picture"),
                                  SELECT_PICTURE);
                          System.out.println("47");
                      }
                  });
          ;
          System.out.println("51");
          Button send = (Button) findViewById(R.id.bSend);
          final TextView status = (TextView) findViewById(R.id.tvStatus);
  
          send.setOnClickListener(new View.OnClickListener() {
  
              @Override
              public void onClick(View arg0) {
  
                  Socket sock;
                  try {
                      sock = new Socket("192.168.0.3", 27015); 
                      System.out.println("Connecting...");
  
                       // sendfile
                            File myFile = new File (selectedImagePath); 
                            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 = sock.getOutputStream();
                            System.out.println("Sending...");
                            os.write(mybytearray,0,mybytearray.length);
                            os.flush();
  
                          sock.close();
                  } catch (UnknownHostException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
  
  
  
              }
          });
      }
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (resultCode == RESULT_OK) {
              if (requestCode == SELECT_PICTURE) {
                  Uri selectedImageUri = data.getData();
                  selectedImagePath = getPath(selectedImageUri);
                  TextView path = (TextView) findViewById(R.id.tvPath);
                  path.setText("Image Path : " + selectedImagePath);
                  img.setImageURI(selectedImageUri);
              }
          }
      }
  
      public String getPath(Uri uri) {
          String[] projection = { MediaStore.Images.Media.DATA };
          Cursor cursor = managedQuery(uri, projection, null, null, null);
          int column_index = cursor
                  .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
          cursor.moveToFirst();
          return cursor.getString(column_index);
      }
  }
  </code></pre>
  
  <p>Android main.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" &gt;
  
      &lt;TextView
          android:id="@+id/tvStatus"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="hello" /&gt;
  
      &lt;TextView
          android:id="@+id/tvPath"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Path: " /&gt;
  
      &lt;Button
          android:id="@+id/bBrowse"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Browse" &gt;
      &lt;/Button&gt;
  
      &lt;Button
          android:id="@+id/bSend"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Send" /&gt;
  
      &lt;ImageView
          android:id="@+id/ivPic"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" &gt;
      &lt;/ImageView&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>Android AndroidManifest.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.workingclient"
      android:versionCode="1"
      android:versionName="1.0" &gt;
  
      &lt;uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="16" /&gt;
      &lt;uses-permission android:name="android.permission.INTERNET"/&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt;
  
      &lt;application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" &gt;
          &lt;activity
              android:name="com.example.workingclient.SendfileActivity"
              android:label="@string/app_name" &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt; 
  </code></pre>
  
  <p>Java Server</p>
  
  <pre><code>import java.io.*;
  import java.net.*;
  
  public class FileServer {
  
      public static void main(String[] args) throws IOException {
          int filesize = 6022386; // filesize temporary hardcoded
  
          long start = System.currentTimeMillis();
          int bytesRead;
          int current = 0;
  
          // create socket
          ServerSocket servsock = new ServerSocket(27015);
          while (true) {
              System.out.println("Waiting...");
  
              Socket sock = servsock.accept();
              System.out.println("Accepted connection : " + sock);
  
              // receive file
              byte[] mybytearray = new byte[filesize];
              InputStream is = sock.getInputStream();
              FileOutputStream fos = new FileOutputStream(
                      "C:\\Users\\5750G\\Desktop\\Test.jpg"); // destination
                                                                      // path and
                                                                      // name of
                                                                      // file
              BufferedOutputStream bos = new BufferedOutputStream(fos);
              bytesRead = is.read(mybytearray, 0, mybytearray.length);
              current = bytesRead;
  
              // thanks to A. Cádiz for the bug fix
              do {
                  bytesRead = is.read(mybytearray, current,
                          (mybytearray.length - current));
                  if (bytesRead &gt;= 0)
                      current += bytesRead;
              } while (bytesRead &gt; -1);
  
              bos.write(mybytearray, 0, current);
              bos.flush();
              long end = System.currentTimeMillis();
              System.out.println(end - start);
              bos.close();
  
              sock.close();
          }
      }
  
  }
  </code></pre>
  
  <p>Error</p>
  
  <pre><code>02-05 17:26:21.871: I/Start Server Button Clicked(22924): yipee
  02-05 17:26:21.871: D/AndroidRuntime(22924): Shutting down VM
  02-05 17:26:21.871: W/dalvikvm(22924): threadid=1: thread exiting with uncaught exception (group=0x40c5e1f8)
  02-05 17:26:21.876: E/AndroidRuntime(22924): FATAL EXCEPTION: main
  02-05 17:26:21.876: E/AndroidRuntime(22924): android.os.NetworkOnMainThreadException
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at libcore.io.IoBridge.connect(IoBridge.java:112)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.Socket.startupSocket(Socket.java:566)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.Socket.tryAllAddresses(Socket.java:127)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.Socket.&lt;init&gt;(Socket.java:177)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.net.Socket.&lt;init&gt;(Socket.java:149)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at com.example.workingclient.SendfileActivity$2.onClick(SendfileActivity.java:93)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.view.View.performClick(View.java:3627)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.view.View$PerformClick.run(View.java:14329)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.os.Handler.handleCallback(Handler.java:605)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.os.Handler.dispatchMessage(Handler.java:92)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.os.Looper.loop(Looper.java:137)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at android.app.ActivityThread.main(ActivityThread.java:4511)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.lang.reflect.Method.invokeNative(Native Method)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at java.lang.reflect.Method.invoke(Method.java:511)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
  02-05 17:26:21.876: E/AndroidRuntime(22924):    at dalvik.system.NativeStart.main(Native Method)
  02-05 17:26:47.916: I/Process(22924): Sending signal. PID: 22924 SIG: 9
  02-05 17:36:15.351: I/System.out(23357): 34
  02-05 17:36:15.351: I/System.out(23357): 36
  02-05 17:36:15.351: I/System.out(23357): 51
  02-05 17:36:15.416: D/CLIPBOARD(23357): Hide Clipboard dialog at Starting input: finished by someone else... !
  </code></pre>