折腾了好几个小时了,现在的问题是第一次输入的名字失败时,键盘录入等待了,不让在输入了。帮忙看看什么情况,先谢啦。
客户端通过键盘录入用户名,服务端对这个名字进行校验。
如果该用户存在,在服务端显示xxx,已登陆,并在客户端显示xxx 欢迎登陆。
如果该客户不存在,在服务端显示xx,尝试登录。并在客户端显示xxx,该用户不存在。
最多登陆3次。
import java.io.*;
import java.net.*;
class login1Client
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.0.145",10014);
BufferedReader bufr=null;
for (int x=0;x<3 ;x++ )
{
//键盘录入3次。
bufr = new BufferedReader(new InputStreamReader(System.in));
String line = bufr.readLine();
//将名字写入网络流
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println(line);
//获取服务端返回的信息
/*
BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
String info =bufin.readLine();
System.out.println("info"+info);
*/
InputStream is = s.getInputStream();
byte[] buf = new byte[1024*1024];
int len =0;
String str=null;
while ((len=is.read(buf))!=-1)
{
str = new String(buf,0,len);
System.out.println(str);
}
if (str.contains("成功"))
{
break;
}
}
//关闭资源
bufr.close();
s.close();
}
}
class login1Thread implements Runnable
{
private Socket s;
public login1Thread(Socket s)
{
this.s=s;
}
public void run()
{
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"....连接上");
try
{
for (int x=0;x<3 ;x++ )//同一个ip地址只能读取三次
{
//读取网络流数据(名字)
BufferedReader is = new BufferedReader(new InputStreamReader(s.getInputStream()));
String name = is.readLine();
System.out.println(name);
//读取本地用户信息库
File fi = new File("1.txt");
FileReader fis = new FileReader(fi);
BufferedReader bf = new BufferedReader(fis);
String line = null;
boolean flag= false;
while ((line=bf.readLine())!=null)
{
if (name.equals(line))
{
flag = true;
break;
}
}
//将反馈信息写入网络流
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
if (flag)
{
pw.println(name+"登陆成功");
System.out.println(ip+"已登录");
break;
}
else
{
pw.println(name+"登陆失败");
System.out.println(ip+"尝试登录");
}
}
//关闭资源
s.close();
}
catch (Exception e)
{
throw new RuntimeException("...");
}
}
}
class login1Server
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10014);
Socket s = ss.accept();
new Thread(new login1Thread(s)).start();
}
} |