使用下面的代码,我没有将“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);
}
}
答案 0 :(得分:0)
除非你连接到echo服务器或同一个应用程序的另一个副本,否则套接字不会那样工作:你不能期望读你写的东西,因为你正在阅读的东西是远端的套接字正在发送。
最有可能的原因是输入流已经达到EOF而read()
正在返回-1。转换为char
时,-1变为zigamorph,打印此无效字符会产生?
。