java关闭IO流的时候Socket也同时关闭
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java关闭IO流的时候Socket也同时关闭相关的知识,希望对你有一定的参考价值。
为什么我关闭IO流的时候,Socket也跟着关闭了。客户端还需要返回信息,怎样才能解决这个问题?或者说应该用什么思路?
参考技术A 楼主解决了么,我想到一个办法:服务端:就是每次接收到一个客户端请求以后,都重新启动一个线程用于逻辑处理,处理完毕后关闭该线程会自动关闭。
客户端:每次发送/接收数据都新建一个socket ,发送完/传输完就关闭当前socket 参考技术B 你的服务端也建立输出流,可以把信息发给客户端,客户端建立输入流,接受服务端发来的信息,这个可以设为死循环接受,就是while(true) 监听服务端发送回来的信息。追问
必须在这里写writerc.close(); 否者服务端收不到信息,但是一旦关闭了,socket也跟着关闭了。
clientSocket = new Socket("localhost",12580);
String nickName = null;
//创建输出流
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(clientSocket.getOutputStream(),
"UTF-8"),true);
/*
* 建立输出流,给服务端发信息
*/
Scanner scanner = new Scanner(System.in);
OutputStream os = clientSocket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");
PrintWriter pw = new PrintWriter(osw,true);
while(true)
pw.println(scanner.nextLine());
供你参考,简单的写了一下
关于java中io流的关闭问题,部分代码,这种情况用不用关闭new FileReader(file)?
BufferedReader br = null;
br=new BufferedReader(new FileReader(file));
br.close();
JVM中对于那些打开了没有关闭的IO文件流,会在不再被使用的情况下,等到下次做Full GC的时候把他们全部回收,尽量少使用这种写法。文章来自:http://blog.csdn.net/kongxx/article/details/6405914 参考技术B public BufferedReader(Reader in)
this(in, defaultCharBufferSize);
public BufferedReader(Reader in, int sz)
...
this.in = in;//FileReader
...
看BufferedReader的close方法:
...
in.close();//调用FileReader的close方法
...
调用BufferedReader的close()方法就可以调用FileReader的close()方法,所以楼上的回答不正确.
以上是关于java关闭IO流的时候Socket也同时关闭的主要内容,如果未能解决你的问题,请参考以下文章