java socket编程 客户端怎么断开socket

一个很BC的问题,我用java做socket编程的过程中,客户端怎么主动断开socket?
InputStream.read()一直让客户端socket处于阻塞状态...
补充:我是想用一个线程实现socket通信,需要时启动线程,连接socket通信;不需要时结束线程,释放socket连接。
现在我想关闭线程,可是inputstream.read()一直阻塞,线程停止不了。。。

或者大家有没有什么好的方法?我想实现用一个线程来管理socket的收发数据以及断线重连等情况,有没有什么较好的方法?

你可以把inputStream和outputStream设置为成员变量,然后写一个方法用来关闭流就好了,
又或者通过System.exit(0)关掉当前客户端线程。
当然,你也可以直接通过工具直接把客户端关了。追问

你可以把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已关闭"),怎么执行这一句代码?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-03
请问楼主,socket.shutdownInput()这段代码要放在什么地方执行啊,我是初学者 过来学习一下追问

你什么时候不需要socket连接了,需要结束了,执行socket.shutdownInput()就行。

追答

这是一条单独执行语句吗? 我的意思是程序是while(true)的 ,现在 要把这段代码 放到程序的什么地方

追问

你什么时候需要关闭socket?
满足什么条件你就要关闭socket?

追答

我是想随时关闭都可以的那种,现在不想监听端口了,就关了它,可以吗?还是非得加一个条件,运行半个小时就关闭的那种

追问

可以。先关input,再关output,再关socket。
想什么时候关闭都行,调用此方法就行。

追答

好的,谢谢你了哈!

第2个回答  2011-08-04
socket.close()
第3个回答  2011-08-04
socket.close()
相似回答