黑马程序员技术交流社区

标题: 加上循环,资源释放不了,何解? [打印本页]

作者: 陈延真    时间: 2013-6-10 20:54
标题: 加上循环,资源释放不了,何解?
//需求:用TCP协议,验证密码并给予反馈

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(10000);
  Socket s = ss.accept();
  BufferedReader br = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  
  PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  while(true){
   String passworld = br.readLine();
   if ("345678".equals(passworld)) {
    pw.println("密码正确");
   } else {
    pw.println("密码有误");
   }
  }
  s.close();//有错
  ss.close();
}
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
  // 创建客户端Socket对象
  Socket s = new Socket("192.168.3.185", 10000);
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String passworld = null;
  for(int x = 0;x<3;x++){
   System.out.println("请输入密码:");
   passworld = br.readLine();
  }
  PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  pw.println(passworld);
  BufferedReader brServer = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  String server = brServer.readLine();
  System.out.println("server:" + server);
  br.close();
  s.close();
}
}

作者: j816326    时间: 2013-6-10 21:28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
   // 创建服务器Socket对象
   ServerSocket ss = new ServerSocket(10000);
   Socket s = ss.accept();
   BufferedReader br = new BufferedReader(new InputStreamReader(
     s.getInputStream()));
   
   PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
   while(true){
    String passworld = br.readLine();
    if ("345678".equals(passworld)) {
     pw.println("密码正确");
    } else {
     pw.println("密码有误");
    }
   }
   s.close();//有错
   ss.close();
}
}
既然用了while循环,那么服务器是不需要关闭的。你要是关闭了话还怎么循环啊。
作者: 陈延真    时间: 2013-6-11 18:53
j816326 发表于 2013-6-10 21:28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

我们用读取流读取数据的时候,也是用的循环读取啊,那个也能释放资源的呀。
作者: j816326    时间: 2013-6-11 19:11
你要是用了while死循环的话,那你就不能释放资源,不然没有意义。如果去掉循环,就OK了  。 在实际开发中的服务器,一般都是不需要关闭的,只在夜间的某个时段,清理一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2