黑马程序员技术交流社区
标题:
服务器用户名登陆问题
[打印本页]
作者:
zcbyzcb
时间:
2013-7-30 21:09
标题:
服务器用户名登陆问题
有还记得的吗,毕老师基础课成day24 LoginDemo.java中写的线程类,我的是这样的,把定义的几个流都写在了for循环外边,可是在客户端,只要第一次输错,第二三次就都输错了,我找到症结所在是这句代码,BufferedReader buf=new BufferedReader(new FileReader("user.txt")); 可是不知道为什么,上个完整代码吧。
/*
客户端通过键盘录入用户名。
服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆
并在客户端显示 xxx,欢迎光临。
如果该用户不存在,在服务端显示xxx,尝试登陆。
并在客户端显示xxx, 该用户不存在。
最多就登陆三次。
*/
import java.io.*;
import java.net.*;
class LoginClient
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket(InetAddress.getByName("192.168.0.101"),10008);
//包装Socket对象输出流
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//定义键盘读入数据流
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//包装Socket对象输入流
BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
for(int i=0; i<3; i++)
{
String line=bufr.readLine();
if(line==null)
break;
pw.println(line);
String info=bufin.readLine();
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class LoginThread implements Runnable
{
private Socket s;
LoginThread(Socket s)
{
this.s=s;
}
public void run()
{
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"....+connected");
try
{
BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader buf=new BufferedReader(new FileReader("user.txt"));
for(int i=0; i<3; i++)
{
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
String name=bufin.readLine();
if(name==null)
{
System.out.println(ip+"断开连接");
break;
}
boolean flag=false;
String line=null;
while((line=buf.readLine())!=null)
{
if(line.equals(name))
{
flag=true;
break;
}
}
if(flag)
{
System.out.println(name+"已登陆");
pw.println(name+"欢迎光临");
break;
}
else
{
System.out.println(name+"尝试登陆");
pw.println(name+",用户名不存在!");
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败!");
}
}
}
class LoginServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10008);
while(true)
{
Socket s=ss.accept();
new Thread(new LoginThread(s)).start();
}
}
}
复制代码
作者:
zcbyzcb
时间:
2013-8-1 19:29
这个咋就没人看呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2