2012-11-05 49 views
1

我在客戶端 - 服務器應用程序中遇到問題。客戶端向服務器發送圖片,服務器回覆回覆消息。客戶端服務器通信java

這裏是我的服務器代碼:

public class Server 
{ 
    public static void main(String[] args) throws Exception 
    { 
     String response="response"; 
     ServerSocket socket = new ServerSocket(3333); 
     while (true) 
     { 
      Socket clientSocket = socket.accept(); 

      DataInputStream dis = new DataInputStream(clientSocket.getInputStream()); 
      FileOutputStream fout = new FileOutputStream("output.jpg"); 
      int i; 
      while ((i = dis.read()) > -1) 
       fout.write(i);  

      DataOutputStream outToClient= new DataOutputStream(clientSocket.getOutputStream()); 

      outToClient.writeBytes(response); 

      fout.flush(); 
      fout.close(); 
      dis.close(); 
      outToClient.close(); 
      clientSocket.close(); 
     } 
    } 
} 

客戶:

public static void main(String[] args) throws Exception 
{ 
    // TODO Auto-generated method stub 
    String sentence; 
    int i; 
    FileInputStream fis = new FileInputStream ("pathphoto.jpg"); 
    Socket sock = new Socket ("hostname",3333); 
    DataOutputStream os = new DataOutputStream(sock.getOutputStream()); 
    System.out.println("Sending...."); 
    while ((i = fis.read()) > -1) 
     os.write(i); 

    BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream())); 
    sentence=inFromServer.readLine(); 
    System.out.println("FROM SERVER: " + sentence); 
    fis.close(); 
    os.close(); 
    sock.close(); 
} 
} 

的問題是,客戶沒有收到來自服務器的響應,我想沿着這些線路:

BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream())); 
sentence=inFromServer.readLine(); 

因爲沒有他們服務器發送響應。

有關如何解決它的任何建議?不停留在的BufferedReader

+1

你怎麼運行這個?在兩個單獨的threds?如果是的話,那麼兩個都是活着的? –

+0

在兩種不同的應用程序中 – sqtd

+0

是否在你的應用程序關閉之前關閉另一個可以讀取/寫入套接字?檢查你是否過快地關閉套接字。 –

回答

1

它,它實際上是停留在 而((I = fis.read())> -1) 由於流的客戶從來沒有告訴過服務器的長度,或關閉的流服務器將嘗試從輸入流讀取下一個字節,並在客戶端完成發送文件並等待服務器的響應時停止。

當您刪除代碼以從服務器讀取響應時,客戶端會繼續並關閉所有流,在這種情況下,服務器將讀取-1並繼續。

+0

我試圖把os.close放在BufferedRedear之前,但它啓動了一個異常,因爲它關閉了套接口 – sqtd

+0

我解決了將長度傳遞給服務器......謝謝 – sqtd