【发布时间】:2013-12-08 00:33:53
【问题描述】:
使用下面的代码,我不会在控制台上打印“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);
}
}
【问题讨论】:
-
这是一个环回套接字连接吗?您还没有显示套接字如何连接到另一端。另一端与数据相呼应的是什么?
-
随机猜测:输入流在 EOF,也就是 -1 的 5 倍。省略 (char) 进行验证。为什么?取决于您的服务器...您是否尝试添加 outStream.flush() 并仅在从输入中读取数据后关闭套接字?
-
您的
socketInputStream 与OutputStream不同。那么,您为什么希望数据回显呢? -
我通过 'new Socket("localhost", 'portnumber') 创建了一个套接字,然后我如何能够通过输入流发送内容并让某些接收者获取该输入?显然,我想错了。
-
@StefanHaustein 喜欢在 .write() 和 .shutdownOutput() 之后添加 .flush() 吗?当我这样做时,它似乎只是挂起。我在here 上读到,套接字一直读取到 EOF,直到我关闭套接字才能得到。因此,我必须在阅读之前关闭它?
标签: java sockets inputstream outputstream