2013-11-22 22 views
0

使用下面的代码,我没有在控制台上打印“daSHI”。 而不是我得到“?????”打印。套接字 - 错误的OutputStream输出(质朴的问号)

为了测试,而不是使用套接字的输入/输出流,我创建了一个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); 
    } 
} 
+0

这是一个环回套接字连接?您没有展示如何将套接字连接到另一端。回应数据的另一端是什么? –

+0

随机猜测:输入流位于EOF处,并且仅为5倍-1。省略(char)来验证。为什么?取决于您的服务器...您是否尝试添加outStream.flush()并仅在您从输入读取数据后关闭套接字? –

+0

你的'''InputStream'与'OutputStream'不一样。那么,为什么你期望数据回显? –

回答

0

除非你连接到一个回声服务器或同一应用程序的另一个副本,插座不工作的方式:你不能指望读你写的什么,因为你正在读什么套接字的最远端正在发送。

最有可能的是,这里的原因是输入流已经命中EOF并且read()返回-1。当投射到char时,-1变成zigamorph,并且打印该无效字符产生?

+0

有趣,谢谢你的洞察力。 – Jonathan