网络编程之用户登录
来源:互联网 发布:车身广告设计软件 编辑:程序博客网 时间:2024/06/14 00:41
/*
需求:
通过客户端键盘录入用户名,实现登录。
服务端对客户端的发送过来的用户名进行校验。
如果该用户存在,服务端显示用户登录,并回馈给客户端欢迎光临。
如果该用户不存在,服务端显示用户尝试登录,并回馈给客户端,该用户不存在。
另外,客户端最多只能尝试登录三次。
服务端也一样作此限定。
思路:
客户端:
1,建立socket服务。
2,读取键盘录入。
3,将录入的一个用户名数据通过socket的输出发出,给服务端。
4,发出后,要读取服务端回馈的信息。
5,判断该信息,如果有欢迎字样表示登录成功,用户名输入结束。
因为操作的是文本,所以可以使用字符流。并加上缓冲提高效率。
*/
import java.net.*;
import java.io.*;
class LoginClient
{
public static void main(String[] args)throws Exception
{
Socket s = new Socket("192.168.0.5",9007);
//读取键盘录入,获取用户名。
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();
}
}
/*
服务端:
1,建立socket服务。
2,不断获取客户端对象。
3,将客户端对象封装到单独的线程中。
4,限定判断次数。
5,读取本地用户文件列表,对获取的用户名进行校验。
6,根据校验结果给出响应信息。
*/
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());
}
}
}
}
class LoginServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(9007);
while(true)
{
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+".....connected");
new Thread(new UserThread(s)).start();
}
}
}
- 网络编程之用户登录
- 网络编程--实现用户登录验证功能
- 【java编程】TCP_Socket网络编程之用户登陆
- 自动登录网络用户问题
- 权限之用户登录
- (101)Tcp网络编程练习:上传文件、上传图片、用户登录
- 网络编程中(socket)用户登录验证以及注册(单用户)
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
- 登录之记住用户与自动登录
- 登录之记住用户与自动登录
- 登录之记住用户与自动登录
- 服务器控件之用户登录
- struts学习之用户登录
- java之用户登录界面
- 用户登录之SHA1加密
- 用户登录之token验证
- [Sql Server 2008 基础] With Ties. Over()子句
- android--多View切换viewpager
- C++ Primer笔记(2)
- 线段树--求区间最大差值
- 别对我说谎:练就一双精确识人眼
- 网络编程之用户登录
- 大型用户应用的 数据库拆分
- 大写日期转换成阿拉伯数字的算法
- 关闭某个已打开的word文件
- EA入门
- C/C++实现基于UDP的网络编程
- 字符串压缩
- android客户端的性能优化
- net.sf.cglib.beans.BeanCopier用途