【问题标题】:Not able to use writeUTF() anymore after reassigning to BufferedOutputStream and FileOutputStream from DataOutputStream从 DataOutputStream 重新分配给 BufferedOutputStream 和 FileOutputStream 后无法再使用 writeUTF()
【发布时间】:2015-04-17 13:44:47
【问题描述】:

我无法通过使用 writeUTF("String") 的套接字与客户端使用 readUTF() 收听消息进行对话。
到目前为止,它按我的意愿工作。但是,在添加从客户端接收文件的代码后,我无法向客户端发送任何消息。代码如下。已经好几天了……谁能帮我解决这个问题?感谢您的意见:-)

// 客户端.java

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

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

// 服务器.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();

【问题讨论】:

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

标签: java sockets stream


【解决方案1】:

我建议您使用 OutputStreamWriter,例如

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

【讨论】:

  • 你的意思是下面的部分? DataOutputStream out = new DataOutputStream(server.getOutputStream());
  • 是的。实际上,您可以跳过制作 DataOutputStream 并从 server.getOutputStream() 构造它
  • 感谢您的建议。你的想法给了我解决这个问题的洞察力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2017-09-17
  • 2017-06-17
  • 2012-10-14
  • 1970-01-01
  • 2019-02-20
相关资源
最近更新 更多