2012-11-05 405 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