一个很BC的问题,我用java做socket编程的过程中,客户端怎么主动断开socket?
InputStream.read()一直让客户端socket处于阻塞状态...
补充:我是想用一个线程实现socket通信,需要时启动线程,连接socket通信;不需要时结束线程,释放socket连接。
现在我想关闭线程,可是inputstream.read()一直阻塞,线程停止不了。。。
或者大家有没有什么好的方法?我想实现用一个线程来管理socket的收发数据以及断线重连等情况,有没有什么较好的方法?
你可以把inputStream和outputStream设置为成员变量,然后写一个方法用来关闭流就好了
---->问题是你用方法关闭流了,但是inputstream.read()还在那里阻塞着,也就是没有真正的关闭啊。
system.exit(0)
---->这个方法不行,这样会把所有的都强制关闭,我只想关闭socket,想发送数据的时候还可以继续创建新的连接。
你说得InputStream.read()一直让客户端socket处于阻塞状态...是指在服务器端的执行的InputStream.read()一直让客户端socket处于阻塞状态么?
追问是客户端自身的inputstream.read(),因为客户端需要接收服务器发送的数据。
追答你可以在线程里面的InputStream.read()那里用try.catch块捕捉异常啊,然后catch里面什么都不做就好了。这样关闭流的时候会抛出异常,就不会进行inputStream.read()了。
追问inputstream.read()
我觉得这个就是让程序阻塞住了,也就是说,除非服务器发送数据,客户端收到,或者服务器关闭socket,这样程序才会执行inputstream.read()后面的代码,所以我意思是:socket.close(),Thread.interrupt(),等方法,都只是在inputstream.read()执行完后才有反应,就是如果inputstream.read()后面是System.out.println("socket已关闭"),怎么执行这一句代码?
你什么时候不需要socket连接了,需要结束了,执行socket.shutdownInput()就行。
追答这是一条单独执行语句吗? 我的意思是程序是while(true)的 ,现在 要把这段代码 放到程序的什么地方
追问你什么时候需要关闭socket?
满足什么条件你就要关闭socket?
我是想随时关闭都可以的那种,现在不想监听端口了,就关了它,可以吗?还是非得加一个条件,运行半个小时就关闭的那种
追问可以。先关input,再关output,再关socket。
想什么时候关闭都行,调用此方法就行。
好的,谢谢你了哈!