2015-04-17 41 views
0

我使用writeUTF(“字符串”)客户听的readUTF使用()的消息,相反有超过插座的麻烦之后了。
到目前为止,它工作正如我想。然而,添加代码接收来自客户端的文件后,我无法向客户端发送任何消息。代码如下。已经有几天的时间了......任何人都可以帮我解决这个问题吗?我很欣赏你的投入:-)无法使用writeUTF()重新分配到的BufferedOutputStream和FileOutputStream中从DataOutputStream类

// Client.java

  String ack = in.readUTF(); 
      println(ack); // "How do you do?" 

      String aack = in.readUTF(); 
      println(aack); // HANGING FOREVER 

// Server.java

   Socket server  = serverSocket.accept(); 
       DataInputStream in = new DataInputStream(server.getInputStream()); 
       DataOutputStream out = new DataOutputStream(server.getOutputStream()); 




// CAN SEND MESSAGES  
       out.writeUTF("How do you do? "+ "\r\n"); 
       out.flush(); 

// AFTER THIS SEGMENT CANNOT WRITE TO CLIENT ANYMORE 

        int bytesRead; 
        int current    = 0; 
        FileOutputStream fos  = null; 
        BufferedOutputStream bos = null; 
        try { 
         byte [] byteArray = new byte [FILE_SIZE]; 
         InputStream is = server.getInputStream(); 
         fos    = new FileOutputStream(FILE_TO_RECEIVED); 
         bos    = new BufferedOutputStream(fos); 
         bytesRead   = is.read(byteArray,0,byteArray.length); 
         current   = bytesRead; 
         do { 
          bytesRead = 
            is.read(byteArray, current, (byteArray.length-current)); 
          if(bytesRead >= 0) current += bytesRead; 
         } while(bytesRead > -1); 

         bos.write(byteArray, 0 , current); 
         bos.flush(); 
         System.out.println("File " + FILE_TO_RECEIVED 
           + " downloaded (" + current + " bytes read)"); 
        } 
     finally { 
      if (fos != null) fos.close(); 
      if (bos != null) bos.close(); 
     } 
// WORKS ALRIGHT UP TO THIS PART 

// PROBLEM BEGINS... 
// CANNOT     
// SEND MASSAGE ANYMORE 
// CLIENT WAIT FOR MSG HANGING FOREVER 
      out.writeUTF("Can you hear?"+ "\r\n"); 
      out.flush(); 
+0

OutputStream os = server.getOutputStream(); PrintWriter pw = new PrintWriter(os,true); pw.println(“你叫什么名字?”);这解决了我的问题。 –

回答

0

我建议您使用OutputStreamWriter,像

OutputStream out = ...; 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, "utf-16")); 
+0

你的意思是以下部分? DataOutputStream out = new DataOutputStream(server.getOutputStream()); –

+0

是的。事实上,你可以跳过使DataOutputStream类,只是构建从server.getOutputStream() – ControlAltDel

+0

感谢您的建议。你的想法给了我洞察力来解决这个问题! –