繁体   English   中英

Java套接字服务器客户端代码卡住

[英]Java Socket Server Client Code Stucks

我已经实现了下面的代码。 服务器从客户端接收图像,然后matlab检测到某个对象并将新图像保存为face.jpg,然后我尝试将一些点发送回客户端。代码卡在//////////部分我的客户代码:

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

                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 D / myTag:无法从服务器读取

服务器读取直到流结束。 客户端将需要关闭套接字以交付流的末尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM