结束socket接收线程

在用到socket的时候,一般手机都是客户端,不可避免的用到socket接收线程,接收从服务器发来的一些信息,当想退出时,肯定要结束掉这个接收线程,比如说下面的run函数

public void run() 
{
	// TODO Auto-generated method stub
	while(flag)
	{
		if(!socket.isClosed() && socket.isConnected() && in != null)
		{
			try 
			{
				String result = in.readLine();
				if(result == null || result.length() <= 0)
				{
				}
				else
				{
					System.out.println(result);
				}
			}
			catch (IOException e) 
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			}
		}
		try
		{
			Thread.sleep(500);
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return;
		}
	}
}

然后想结束时,先将flag置为false,再执行下面的CloseSocket函数

public void CloseSocket()
{
	out.close();
	try 
	{
		in.close();
		socket.close();
	} 
	catch (IOException e) 
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

这样看起来没错,但退出程序时会出现下面的错误,

结束socket接收线程_第1张图片

错误的代码是这一句

String result = in.readLine();

因为我们已经关闭socket、in了,所以再去读取会出现这个错误,将CloseSocket函数改为下面就不会有这个错误了

public void CloseSocket()
{
	try 
	{
		socket.shutdownOutput();
		socket.shutdownInput();
	}
	catch (IOException e1) 
	{
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	
	out.close();
	try 
	{
		in.close();
		socket.close();
	} 
	catch (IOException e) 
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}


你可能感兴趣的:(结束socket接收线程)