import java.io.*; import java.net.*; public class LoginClient { public static void main(String[] args) throws Exception { Socket s=new Socket("169.254.91.182",10012); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); // BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream())); for(int x=0;x<3;x++) { String line=br.readLine(); if(line==null) break; pw.write(line); /* PrintWriter是打印流,他的write方法覆盖了Writer的write方法,所以你要写入数据时需要把它从缓冲区刷新 而我们既然用到打印流,就是希望使用它比别的流更方便的方法,上面蓝色部分里构造函数的true参数就表示 当你使用 println、printf 或 format 这几个方法的时候,他会自动把数据刷新输出缓冲区,所以这里,包括下 面的红色部分都应该使用println(line)方法 */ String sr= br1.readLine(); if(sr.contains("欢迎")) break; System.out.println(sr); } br.close(); s.close(); } } —————————————————————————————————————————————————————————————————————————— import java.io.*; import java.net.*; public class LoginServer { public static void main(String[] args) throws Exception { ServerSocket ss=new ServerSocket(10012); //另外这里应该加一个while循环,你肯定不希望你的服务器每次只能有一个客户连接进来吧?用一个循环,来接受客户的连接, //连接上来一个就会创建一个线程,这样才能为多个客户服务,否则只能当为一个客户服务完之后才能为其他客户服, //如果一个网站这么干的话,一个人连接,其他人只能等待,那还有谁愿意访问呢? while(true){ Socket s=ss.accept(); new Thread(new UserThread(s)).start(); } } } 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 br=new BufferedReader(new InputStreamReader(s.getInputStream())); String name=br.readLine(); BufferedReader br1=new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\cop_11.txt")); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); String l=null; boolean flag=false; while((l=br1.readLine())!=null) { System.out.println(l); if(l.equals(name)) { flag=true; break; } } if(flag=true) { System.out.println(name+":已登录!"); pw.write(name+":欢迎!登入成功!"); break; } else { System.out.println(name+":正在尝试登陆!"); pw.write("用户名不存在,请重新输入!"); } s.close(); }} catch(Exception e) { throw new RuntimeException(ip+"校验失败"); } } } |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |