黑马程序员技术交流社区
标题:
程序中break问题
[打印本页]
作者:
yufeng47
时间:
2013-4-9 14:38
标题:
程序中break问题
import java.io.*;
import java.net.*;
//客户端
class LoginClient
{
public static void main(String[] args) throws Exception
{
//创建客户端的socket服务。指定目的主机和端口
Socket s = new Socket("psy",10004);
//创建输入流
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//获取客户端输出流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//获取客户端输入流
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
for (int i=0; i<3; i++)
{
String line = bufr.readLine();
if (line==null)
break; //跳出当前循环,执行循环体以后的内容
if (line.equals(""))
{
System.out.println("用户名不能为空!");
continue;//跳出当前循环,继续执行下一次循环
}
out.println(line);
String info = bufIn.readLine();
System.out.println("客户端:"+info);
if (info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
//将服务端处理客户端数据的过程封装进线程
class UserThread implements Runnable
{
private Socket s;
UserThread(Socket s)
{
this.s = s;
}
public void run()
{
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
try
{
for (int x=0; x<3; x++)
{
//获取服务端输入流
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String name = bufIn.readLine();
if(name==null)
break;
//创建输入流关联用户文件
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
//获取服务端输出流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
boolean flag = false;
String line = null;
while ((line=bufr.readLine())!=null)
{
if (line.equals(name))
{
flag = true;
break;
}
}
if (flag)
{
System.out.println("服务端:"+name+",已登录");
out.println(name+",欢迎光临!");
/*
问:第60行的break与该处的break都可达到一个目的跳出循环关闭客户端,而且他们之中只要满足第60行
break,就会达到关闭客户端的目的,为什么还得在这个地方实现break?
答:目的是节约资源,提高服务端性能。
若只是第60行有break,也能达到关闭客户端的目的。但是会导致即使满足了这个地方的条件,
还得要多执行一段时间,直到下一次读到第60行的break才跳出关闭客户端流。
若用户太多的情况下,不利于服务端优化,高效释放资源。
break存在的必要:为了跳出当前循环,以便关闭客户端,释放资源。
*/
break; //或者用s.close()代替break。
}
else
{
System.out.println("服务端:"+name+",尝试登录");
out.println("用户名"+name+"不存在!");
}
}
System.out.println("关闭客户端链接");
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+",校验失败");
}
}
}
//服务端
class LoginServer
{
public static void main(String[] args) throws Exception
{
//创建服务端,监听端口10004
ServerSocket ss = new ServerSocket(10004);
while (true)
{
//获取客户端(可获取多个不同客户端发来的数据)
Socket s = ss.accept();
//创建线程,将客户端引用作为值传递给线程构造函数。
//目的是保证不同的客户端,在服务端都享有一个独立的线程,互不影响,并发执行。
new Thread(new UserThread(s)).start();
}
}
}
复制代码
作者:
陈丽莉
时间:
2013-4-9 14:58
问题在哪儿。。 这是分享帖么~
作者:
yufeng47
时间:
2013-4-9 16:03
陈丽莉 发表于 2013-4-9 14:58
问题在哪儿。。 这是分享帖么~
问了 不过不是在开头和结尾 实在程序段中间:shutup:
作者:
陈丽莉
时间:
2013-4-9 17:24
yufeng47 发表于 2013-4-9 16:03
问了 不过不是在开头和结尾 实在程序段中间
中间那段你不是自己回答了吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2