2012-05-02 12 views
13

Próbuję wysłać wybrane zdjęcie z galerii na mój telefon i wysłać to zdjęcie z telefonu na komputer po kliknięciu przycisku powinno to zrobić zdjęcie i umieścić je w pliku, a następnie przenieść na mój komputer. Sprawdziłem kod na moim komputerze - dla obu stron - i działało całkiem dobrze.Serwer klienta: przesyłanie plików z systemu Android na komputer PC za pośrednictwem gniazda

Kiedy to przetestuję, nic się nie dzieje!

Oto kod: strona

Serwer:

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(1149); 
     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\\Arwa\\Documents\\WebOffice.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 >= 0) current += bytesRead; 
      } while(bytesRead > -1); 

      bos.write(mybytearray, 0 , current); 
      bos.flush(); 
      long end = System.currentTimeMillis(); 
      System.out.println(end-start); 
      bos.close(); 



      sock.close(); 
      } 
    } 

} 

po stronie klienta (Android):

package com.arwa.file.send; 

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("MY_PCs_IP", 1149); 
        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); 
    } 
} 

kod XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvStatus" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

    <TextView 
     android:id="@+id/tvPath" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Path: " /> 

    <Button 
     android:id="@+id/bBrowse" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Browse" > 
    </Button> 

    <Button 
     android:id="@+id/bSend" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Send" /> 

    <ImageView 
     android:id="@+id/ivPic" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
    </ImageView> 

</LinearLayout> 
+0

Podczas uruchamiania z emulatora adres IP jest inny niż w "rzeczywistym świecie" jaka jest wartość MY_PCs_IP? 10.0.2.2? i adres IP serwera? –

+0

jego wartością jest IP mojego komputera, ponieważ łączę się przez Wi-Fi –

Odpowiedz

2

trzeba tylko dodać pozwoleniem

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 

i będzie działać idealnie.

1

Zamiast próbować go w emulatorze na komputerze, spróbuj uruchomić to samo na urządzeniu mobilnym. Zmieniłem również numer portu na 8000 zamiast na port 1149.

Po wprowadzeniu tych zmian kod zadziałał dobrze dla mnie. Proszę sprawdzić.

0

To nie działa, ponieważ nie zmieniono twojego prądu zmiennego na 0 Wygląda na to, że nadszedł czas na kolejną pętlę bez ponownego ustawiania wartości. Tak więc, według mnie, może to być przyczyną problemu w drugiej iteracji twojego wykonania.

Powiązane problemy