2012-04-04 1 views
1

클라이언트에서 서버로 이미지 파일을 두 개 이상 보내고 싶습니다. 응용 프로그램에서 코드를 작성하지만 하나의 이미지 만 보내 게됩니다. 클라이언트 응용 프로그램에는 한 프레임이 있으며 서버 응용 프로그램에도 서버를 시작/중지 할 수있는 프레임이 있습니다.Java : 소켓을 사용하여 클라이언트에서 서버로 이미지 파일을 두 개 이상 보내십시오.

클라이언트 응용 프로그램에서 이미지 파일을 보내고이 이미지 파일을 서버 컴퓨터에 보내면이 이미지 파일을 열려고 할 때 아무 것도 없지만 서버 응용 프로그램 (서버 프레임)을 닫으면 문제가 하나 더 있습니다. 이미지를 볼 수 있습니다.

코드 :

클라이언트 사이트 :

public void run() { 
while (true) { 
      try { 
       byte[] buffer = new byte[8192]; 
       fis = new FileOutputStream("C:\\"+(s1++)+".jpg"); // fis is FileOutputStream 
       while ((count = in.read(buffer)) > 0){ //count is a integer and 'in' is InputStream 
       fis.write(buffer, 0, count); 
       fis.flush();  
       } 
       } catch (Exception e) {} 
} 
} 

문제 : 만

  1. 서버 측에서

    public void sendPhotoToServer(String str){ // str is image location 
        try { 
         InputStream input = new FileInputStream(str); 
         byte[] buffer=new byte[1024]; 
         int readData; 
         while((readData=input.read(buffer))!=-1){ 
         dos.write(buffer,0,readData); // dos is DataOutputStream 
         } 
        } catch (FileNotFoundException e) { 
    
        } catch (IOException e) { 
    
        }  
    } 
    

    이 코드는 스레드로 실행 첫 번째 이미지는 클라이언트가 보내는 복사입니다.

  2. 서버 응용 프로그램을 닫을 때만이 이미지를 볼 수 있습니다.

예외가없는 나는 연속적으로 다른 클래스의 sendPhotoToServer 방법은 모든 이미지 파일을 보내 전화 :

if (photoSourcePath != null) { 
          clientClass.sendPhotoToServer(photoSourcePath+"\\"+rowData.get(5)); 
         } 
+0

당신이 예외를받을 수 있나요? 그리고 어떻게'sendPhotoToServer'를 호출할까요? –

+0

예외가 there.In 다른 자바 클래스 I이 같은 sendPhotoToServe 메소드 호출 없다 (photoSourcePath + 경우 (! photoSourcePath = NULL) { \t \t \t \t \t \t \t \t clientClass.sendPhotoToServer을 "\\"+ rowData.get (5)); \t \t \t \t –

+0

아무 것도하지 않고 예외를 잡았으니 확실합니까? 그리고'sendPhotoToServer'를 루프에서 호출하고 있습니까? 또한 질문을 편집하여 관련 코드를 추가하고 주석에 넣지 마십시오. –

답변

0

의 작업이 완료되면 서버 측 스레드를 중지해야합니다. while 루프는 영원히 계속 실행되고 스트림을 열어두기 때문에 서버를 종료 할 때 이미지가 표시되므로 스레드가 멈 춥니 다.

이에 서버 측을 변경해보십시오 :

public void run() { 
    boolean processing = true; 
    while (processing) { 
     try { 
      byte[] buffer = new byte[8192]; 
      fis = new FileOutputStream("C:\\" + (s1++) + ".jpg"); // fis is 
                    // FileOutputStream 
      while ((count = in.read(buffer)) > 0) { // count is a integer 
                // and 'in' is 
                // InputStream 
       fis.write(buffer, 0, count); 
       fis.flush(); 

      } 
      processing = false; 
     } catch (Exception e) { 
      processing = false; 
     } 
    } 
} 
+0

실제로 루프를 영원히 멈출 필요가 없습니다. 이것은 하나의 클라이언트가 아니기 때문입니다. 한 클라이언트는 이미지를 보내서 다른 클라이언트도 이미지를 보내서 영원히 실행해야합니다. –

+0

또는 2 또는 3 이미지 클라이언트가 2 시간에서 3 시간 후에 이미지를 더 보내려면 서버를 시작하고 중지해야 할 때마다 보내야합니다. 그러나 서버 응용 프로그램은 24 시간 실행됩니다. –

관련 문제