JAVA写的一个接收SOCKET数据的程序,多线程,一方面负责接收,一方面负责给用户分发,现在遇到一个比较奇怪的现象:运行1个小时左右,就接收不到数据,如果接收数据的线程重新new 一个接收对象,瞬间可以收到少量的数据,但是马上又接收不到数据了,知道再new出来一个对象(程序中有一个线程负责判断接收数据是否超时,如果超时,就会重新启动接收数据的线程);这个时候,如果把这个进程KILL掉,再启动,马上就恢复正常,接收速度大大提高,但是过了一个小时之后,又会接收不到数据。在接收不到数据的时候用pstack看了一下线程,20个左右。
请问这个应该是哪里的问题呢?
请问这个应该是哪里的问题呢?
还有一种情况,在一台机器上多个socket的情况,两个socket用到同一个端口,IP的情况,这样也会出问题。没具体研究过,楼主有时间看看这个,看有不有用
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6213296
下面的程序是线程中判断是否超时的代码:
-----------------------------------------------
if(!this.check_time())
{
System.out.println("正在重新启动监听线程...");
try
{
receive_socket_data.sock.close();
System.out.println("已经关闭Socket数据的线程.."); } catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
receive_socket_data.sock = null;
}
---------------------------------------------------
在另一个类中,这样启动多线程:
if(server_socket == null || server_socket.isClosed())
{
server_socket = new ServerSocket(socket_server.socket_port);
server_socket.setReuseAddress(true);
}
sock = server_socket.accept();
sock.setReuseAddress(true);
System.out.println("new client connected.");
SendHelper sh = new SendHelper(sock);
sh.start();