socket实现用户登陆
来源:互联网 发布:复旦大学网络教育 编辑:程序博客网 时间:2024/05/02 18:52
需求:
通过客户端键盘录入用户名,实现登录。
服务端对客户端的发送过来的用户名进行校验。
如果该用户存在,服务端显示用户登录,并回馈给客户端欢迎光临。
如果该用户不存在,服务端显示用户尝试登录,并回馈给客户端,该用户不存在。
另外,客户端最多只能尝试登录三次。
服务端也一样作此限定。
效果图(左图为客户端,右图为服务器端):
思路:
客户端:
1,建立socket服务。
2,读取键盘录入。
3,将录入的一个用户名数据通过socket的输出发出,给服务端。
4,发出后,要读取服务端回馈的信息。
5,判断该信息,如果有欢迎字样表示登录成功,用户名输入结束。
因为操作的是文本,所以可以使用字符流。并加上缓冲提高效率。
服务端:
1,建立socket服务。
2,不断获取客户端对象。
3,将客户端对象封装到单独的线程中。
4,限定判断次数。
5,读取本地用户文件列表,对获取的用户名进行校验。
6,根据校验结果给出响应信息。
完整代码:
import java.net.*;import java.io.*;/* * 客户端: */class LoginClient{public static void main(String[] args)throws Exception {Socket s = new Socket("192.168.137.199",8888);//读取键盘录入,获取用户名。BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//对socket输出流进行打印。将录入的用户名发送给服务端。PrintWriter out = new PrintWriter(s.getOutputStream(),true);//对socket输入流中的数据进行获取,其实就是在获取服务端的回馈信息。BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//客户端值允许录入三次。for(int x=0; x<3; x++){//从键盘读取一行。String username = bufr.readLine();if(username==null){//s.shutdownOutput();break;}//将该行数据打印到socket输出流。out.println(username);//获取服务端反馈信息。String info = bufIn.readLine();System.out.println(info);if(info.contains("欢迎"))break;}bufr.close();s.close();}}/* * 服务器端: */class LoginServer{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(8888);while(true){Socket s = ss.accept();System.out.println(s.getInetAddress().getHostAddress()+".....connected");new Thread(new UserThread(s)).start();}}}class UserThread implements Runnable{private Socket s;UserThread(Socket s){this.s = s;}public void run(){try{for(int x=0; x<3; x++){//判断用户名是否为空BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String name = bufIn.readLine();if(name==null){System.out.println("程序结束 ");break;}//匹配用户名并实现登陆BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));String line = null;PrintWriter out = new PrintWriter(s.getOutputStream(),true);boolean b = false;while((line=bufr.readLine())!=null){if(line.equals(name)){b = true;break;}}if(b){System.out.println(name+"已登录");out.println(name+",欢迎光临");}else{System.out.println(name+"尝试登录");out.println(name+",用户不存在");}}}catch (Exception e){System.out.println(e.toString());}finally{try{if(s!=null)s.close();}catch (Exception e){System.out.println("close:"+e.toString());}}}}
总结:其实服务器就是类似这样一种程序,当用户请求服务器的时候,它首先会创建socket服务,这样客户端才能连上,第二步把客户端拿到的对象封装成线程,第三步进行数据的传输,服务端底层就是用的这三个技术socket,多线程,io,每个客户端去请求都会做这三个事情,我们就不用去写它了,服务器提供了更简单的对象让你去用。
服务器的作用就一个,不断的去处理客户端的请求并给客户端的请求有相应的应答。
- socket实现用户登陆
- socket实现用户登陆
- ajax实现用户登陆
- 实现用户登陆的Servlet
- WebWork实现用户的登陆
- session实现用户登陆功能
- django实现用户登陆功能
- javascript实现用户登陆注册
- Android登陆用户的实现
- 应用RMS实现用户自动登陆功能
- 应用RMS实现用户自动登陆功能
- 应用RMS实现用户自动登陆功能
- 用户登陆与验证的简单实现
- 用户登陆与验证的简单实现
- 应用RMS实现用户自动登陆功能
- 实现的不让同一个用户登陆
- 实现的不让同一个用户登陆
- struts入门:struts实现用户登陆
- ubuntu 11.04 配置双显示器
- Linux多线程编程(不限Linux)
- NYOJ-448 寻找最大数
- 内容营销——网络营销的杀手级武器
- sencha-touch-1.1中如何定制icon
- socket实现用户登陆
- 进程之间的通信方法
- 如何使用PHP DOMDocument创建动态XML文件
- 本周计划11.28-12.04
- 开发php扩展
- Ruby开发者应该熟悉的10个工具
- Linux关机命令详解
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- Ruby开发者应该熟悉的10个工具