套接字 - 错误的OutputStream输出(时髦的问号)

时间:2013-11-22 23:45:08

标签: java sockets inputstream outputstream

使用下面的代码,我没有将“daSHI”打印到控制台上。 相反,我得到“?????”打印。

为了测试,我没有使用套接字的输入/输出流,而是创建了一个FileInputStream和FileOutputStream,从同一个文件写入/读取,并且“daSHI”被打印得很好。

但是,当我使用sock.getOutputStream和sock.getInputStream时,由于某种原因它不起作用。我得到的只是问号。有任何想法吗?编码问题?

public void sendMessage(Socket sock) throws KVException {

    OutputStream outStream;
    InputStream inStream;

    try{

        byte[] b = {'d', 'a', 'S', 'H', 'I'};
        outStream = sock.getOutputStream();

        outStream.write(b);
        sock.shutdownOutput();



        inStream = sock.getInputStream();

        for (int i = 0; i < b.length; i++) {
            System.out.print("" + (char) inStream.read());
         }

    }
    catch(IOException e){
        KVMessage errorMessage = new KVMessage("resp", "Network Error: Could not send data");
        throw new KVException(errorMessage);
    }
}

1 个答案:

答案 0 :(得分:0)

除非你连接到echo服务器或同一个应用程序的另一个副本,否则套接字不会那样工作:你不能期望读你写的东西,因为你正在阅读的东西是远端的套接字正在发送。

最有可能的原因是输入流已经达到EOF而read()正在返回-1。转换为char时,-1变为zigamorph,打印此无效字符会产生?