【发布时间】:2021-04-10 09:54:13
【问题描述】:
我的 Java 套接字和连接有问题。即使流上有数据,我的输入流似乎也没有读取任何数据。以下是我们如何读取数据的示例:
InputStream is = socket.getInputStream();
StringBuffer buf = new StringBuffer();
final int SO_TIME = 2500;
socket.setSoTimeout(SO_TIME);
long readTime = 0;
boolean remoteSocketClosed = false;
//Read data while the Remote-Socket is opened and the timeout is OK
while (!remoteSocketClosed && readTime < 30000)
{
try
{
int c = is.read();
if (c != -1)
{
buf.append((char)c);
}
else //c==-1
{
remoteSocketClosed = true;
}
}
catch (SocketTimeoutException socketTimeout)
{
readTime += SO_TIME;
}
}
if (readTime >= 30000)
{
throw new IOException("No answer from server after request (" + readTime +"ms )");
}
else
{
if (buf.length() > 0)
{
return buf;
}
else
{
return null;
}
}
finally
{
try
{
if (socket!=null)
socket.close();
}
catch (Exception e)
{
l.error("Socket not closed", e);
}
try{Thread.sleep(250);}catch(Exception e){}
}
现在我觉得这很好。但是,当流上有数据时,它不会被拾取。我可以使用 telnet 并查看该连接上的数据,但 Java 只是抛出 IOException(超时)。
服务器在同一台机器上运行(本地主机),我们可以向服务器发送数据,但答案不知何故丢失了(仅在 Java 中而不是在 telnet 中)。这是我不知道的一些奇怪的设置吗?我们使用的是 Windows 10 和 Java 8,防火墙都被禁用。我从来没有经历过这样的事情,所以任何帮助表示赞赏。
【问题讨论】:
-
你在哪里向服务器发送数据?你冲洗了吗?也许您的服务器在发送回复之前仍在等待数据。
标签: java sockets inputstream