2015-05-08 3 views
1

Я внедрил приведенный ниже код. Сервер получает изображение от клиента, а затем Matlab обнаруживает какой-то объект и сохраняет новое изображение face.jpg, затем я пытаюсь отправить некоторые точки обратно клиенту. Код утилит в ////////// части моего клиентского кода:Код ключа сервера Socket Socket Stacks

///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

       Thread.sleep(15000); 
       Log.d("myTag","Test message11"); 


       try { 
        points = inFromServer.readLine(); 
       }catch(Exception IO){ 

        Log.d("myTag","Fails to read from server"); 
       } 


       Log.d("myTag",points); 



       sock.close(); 

       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

Весь код клиента Android здесь. Реальная идея? Пожалуйста помоги.

public class MyActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
} 

int TAKE_PHOTO_CODE = 0; 
public static int count=0; 
public static String message="SENT"; 


public void button2OnClick(final View k){ 
    //Connecting to server and send the picture 
    new Thread(new Runnable(){ 
     public void run(){ 
      try { 



       int i; 
       FileInputStream fis = new FileInputStream (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg"); 

       Socket sock = new Socket("192.168.1.91", 6789); 

       DataOutputStream os = new DataOutputStream(sock.getOutputStream()); 
       BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream())); 

       byte[] buffer = new byte[1024]; 
       int bytesRead; 

       while ((i = fis.read()) > -1) 
        os.write(i); 
       fis.close(); 
       os.close(); 

       //lhyh apotelesmatos apo server 
       String points; 

       points=""; 

       ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

       Thread.sleep(15000); 
       Log.d("myTag","Test message11"); 


       try { 
        points = inFromServer.readLine(); 
       }catch(Exception IO){ 

        Log.d("myTag","Fails to read from server"); 
       } 


       Log.d("myTag",points); 



       sock.close(); 

       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 


       File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg"); 
       filePath2.delete(); 

       //File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder"); 
       //filePath2.delete(); 






       }catch (Exception IO){ 

       message="NOT SENT"; 

       File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg"); 
       filePath.delete(); 

       File filePath2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder"); 
       filePath2.delete(); 

       Log.d("myTag",message); 

      } 
     } 

    }).start(); 
    Button button=(Button) k; 
    ((Button) k).setText(message); 



} 


public void buttonOnClick(View v){ 



    //here,we are making a folder named picFolder to store pics taken by the camera using this application 
    final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
    File newdir = new File(dir); 
    newdir.mkdirs(); 

    Button capture = (Button) findViewById(R.id.button); 
    capture.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 


      // here,counter will be incremented each time,and the picture taken by camera will be stored as 1.jpg,2.jpg and likewise. 
      count++; 
      String file = dir+"1.jpg"; 
      File newfile = new File(file); 
      try { 
       newfile.createNewFile(); 
      } catch (IOException e) {} 

      Uri outputFileUri = Uri.fromFile(newfile); 

      Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

      startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); 





     } 
    }); 
} 

@TargetApi(11) 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { 
     Log.d("CameraDemo", "Pic saved"); 


     // Afou travhksei thn kainouria eikona provaletai sto imageview 
     Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/1.jpg"); 
     ImageView image = (ImageView) findViewById(R.id.imageView2); 
     image.setImageBitmap(bmp); 
     //mage.setRotation(270); 

    } 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_my, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

Я посылаю код сервера, а также общественного класса ImageReceiver {

public static void main(String[] args) { 

    try{ 

     ServerSocket socket = new ServerSocket(6789); 

     System.out.println("Server On-----Waiting for Image"); 
     while(true) 
     { 

      ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      //         Receive Image From CLient            // 
      ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      Socket clientSocket = socket.accept(); 

      File filePath = new File("C:\\ImagesReceived\\image.jpg"); 
      filePath.delete(); 

      DataInputStream dis = new DataInputStream(clientSocket.getInputStream()); 
      FileOutputStream fout = new FileOutputStream("C:\\ImagesReceived\\image.jpg"); 
       try{ 


       int i; 
       while ((i = dis.read()) > -1) { 

        fout.write(i); 
       } 
       System.out.println("Image received"); 
       }catch(Exception FromClient){ 
        System.out.println("Image wasn't received"); 

       } 
       fout.flush(); 
       fout.close(); 

       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
       //     Open Matlab Connection in order to Make the Face Detection        //// 
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

       try{ 

        MatlabProxyFactoryOptions options = 
           new MatlabProxyFactoryOptions.Builder() 
            .setUsePreviouslyControlledSession(true) 
            .build(); 
          MatlabProxyFactory factory = new MatlabProxyFactory(options); 
          MatlabProxy proxy = factory.getProxy(); 


          proxy.eval("addpath('C:\\Users\\Theojim')"); 
          proxy.eval("run('firsttry.m')"); 
          proxy.eval("rmpath('C:\\Users\\Theojim')"); 
          System.out.println("Matlab Done"); 
          // close connection 
          proxy.disconnect(); 




       } 
       catch(Exception Matlab){ 
        System.out.println("Matlab Error"); 
       } 



       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
       //     Epistrofh Shmeiwn Proswpou apo text file             //// 
       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

       try{ 
       String sCurrentLine; 

       BufferedReader br = null; 
       br = new BufferedReader(new FileReader("C:\\ImagesReceived\\facepoints.txt")); 
       String points=""; 
       while ((sCurrentLine = br.readLine()) != null) { 

        points+=sCurrentLine; 

       } 
       System.out.println(points); 



       DataOutputStream outToClient = new DataOutputStream(clientSocket.getOutputStream()); 
       outToClient.writeBytes(points); 
       System.out.println("points sent to android"); 
       }catch(Exception Points){ 
        System.out.println("Points Failed to be sent to client"); 
       } 


      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      //       Epistrofh Eikonas Face Detected             //// 
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

      //try{ 
       // int j; 

       // FileInputStream file = new FileInputStream("C:\\ImagesReceived\\face.jpg"); 
       //DataOutputStream stream = new DataOutputStream(clientSocket.getOutputStream()); 

       // while ((j = file.read()) > -1) { 
       // System.out.println("While starts"+j); 
        // stream.write(j); 
        //stream.flush(); 
        //System.out.println("While endss"); 
       //} 
       //System.out.println("While exits"); 
       //file.close(); 
       //stream.close(); 
       dis.close(); 



      //} 
      //catch(Exception ImageFace){ 
       //System.out.println("Face.jpeg Failed to be sent to client"); 

      //} 












       clientSocket.close(); 

     } 

    }catch(Exception IO){ 
     System.out.println("ERROR"); 
    } 

} 

}

и, наконец, я посылаю последнюю часть файла logat в что именно происходит. Пожалуйста помоги!!!!!

05-26 22:05:59.715 16000-16491/com.example.theojim.myapplication D/myTag﹕ Test message11 

05-26 22: 05: 59,716 16000-16491/com.example.theojim.myapplication Д/MyTag: Сбой чтения с сервера

+0

'Сервер предоставляет изображение от клиента' ?? Вы имеете в виду «Сервер получает изображение от клиента»? – greenapps

+0

'catch (Exception ImageFace)'? Какое исключение? Осмотреть imageFace.getMessage(); – greenapps

+0

'FileInputStream file'. Непрочитанный код. файл используется в «Файле файла». Лучше 'FileInputStream fis'. – greenapps

ответ

0

Сервер не читает до конца потока. Клиент должен будет закрыть сокет, чтобы доставить конец потока.

+0

Я также отправил код своего клиента. Я закрыл сокет. – Theojim