Java TCP/IP服务器未正确关闭连接
我已经为Android手机创建了一个MMO,并使用带有TCP/IP套接字的Java服务器。一般来说,一切都很好,但在客户端登录和注销一天后,我的网络变得非常滞后——即使没有连接客户端。NETSTAT没有显示任何延迟的连接,但显然发生了严重的错误 如果我完全重新启动,一切都会奇迹般地恢复正常,但从长远来看,这不是一个站得住脚的解决方案。这就是我的断开连接方法(两端)的样子: _输入和_输出是从套接字派生的BufferedInputStream和BufferedOutputStream。根据文档,调用shutdownInput()和shutdownOutput()应该是不必要的,但我正在尽我所能来解决这个问题 我用默认设置实例化套接字——我不涉及soLinger、KeepAlive、noDelay或类似的东西。我在发送/接收时没有设置任何超时。我尝试过使用WireShark,但它没有显示任何异常,就像NETSTAT一样Java TCP/IP服务器未正确关闭连接,java,sockets,tcp,ip,lag,Java,Sockets,Tcp,Ip,Lag,我已经为Android手机创建了一个MMO,并使用带有TCP/IP套接字的Java服务器。一般来说,一切都很好,但在客户端登录和注销一天后,我的网络变得非常滞后——即使没有连接客户端。NETSTAT没有显示任何延迟的连接,但显然发生了严重的错误 如果我完全重新启动,一切都会奇迹般地恢复正常,但从长远来看,这不是一个站得住脚的解决方案。这就是我的断开连接方法(两端)的样子: _输入和_输出是从套接字派生的BufferedInputStream和BufferedOutputStream。根据文档,调
我非常想知道这个问题的答案。我在这个项目上投入了大量的精力,对Java默认TCP实现中的一个严重隐藏缺陷感到失望。去掉shutdownInput()和shutdownOutput()以及除BufferedOutputStream关闭之外的所有关闭,然后在finally块中关闭套接字本身作为皮带和支架。您正在关闭并关闭输出流之前的所有其他内容,这会阻止它刷新。关闭输出流将刷新输出流并关闭套接字。这就是你所需要的。点击这里,无法对原始帖子发表评论
- 重新启动服务器进程似乎无法解决问题。即使在完全关闭服务器几分钟后,网络仍然非常“滞后”
- 我所说的“laggy”是指,无论是上行还是下行流量,连接速度都会变得非常慢。尝试加载网站或上传到FTP的速度非常慢,就像我使用14.4k调制解调器一样(我使用的是15mbs光纤)。当它处于这种状态时,互联网速度测试甚至不起作用——当网站最终加载时,我遇到一个找不到文件的错误
- 所有这些都会在重新启动后立即清除,并且只有在重新启动后才会清除
- 我按照EJP的建议修改了断开连接的方法,但问题仍然存在
- 服务器运行在Windows 7安装上,是Java/Java SDK的最新版本。服务器有16gb的RAM,尽管我可能没有为JVM充分使用而正确分配它。似乎不存在杂散线程或进程。我看看JVISUALVM怎么说jysend 13分钟前
- JVISUALVM中没有什么不寻常的地方——10mb堆,50%的CPU使用率,3160个对象(预期),437个活动线程中有27个启动。服务器已运行约18小时;加载CNN的头版大约需要一分钟,而我使用的正常速度测试(first hit Google speed test)甚至不会加载该页面。NETSTAT显示没有延迟连接。运行所有最新的防病毒程序。服务器在过去是全天候运行的,没有任何问题——只有当我开始在它上面运行这个Java服务器时,这种情况才开始发生
public final void disconnect()
{
Alive = false;
Log.write("Disconnecting " + _socket.getRemoteSocketAddress());
try
{
_socket.shutdownInput();
}
catch (final Exception e)
{
Log.write(e);
}
try
{
_socket.shutdownOutput();
}
catch (final Exception e)
{
Log.write(e);
}
try
{
_input.close();
}
catch (final Exception e)
{
Log.write(e);
}
try
{
_output.close();
}
catch (final Exception e)
{
Log.write(e);
}
try
{
_socket.close();
}
catch (final Exception e)
{
Log.write(e);
}
}