网络编程中(socket)用户登录验证以及注册(单用户)

网络编程中(socket)用户登录验证以及注册(单用户)

代码演示如下:

package com.tiger.login;
import java.io.*;
import java.net.*;
import java.util.Properties;
/**
 * 网络编程中(socket)用户登录验证以及注册
 * @author tiger
 * @Date 2017年7月31日
 */
public class ServerLogin {

	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		System.out.println("服务器启动。。。。");
		String path = "E:\\tiger\\user.txt"; 
		ServerSocket server = null;
		DataInputStream is = null;
		DataOutputStream os = null;
		server = new ServerSocket(6666);
		Socket socket = server.accept();
		is = new DataInputStream(socket.getInputStream());  
		os = new DataOutputStream(socket.getOutputStream()); 

		login(is,os,path,socket);//登录
		
		os.close();  
		is.close();
	}
	/**
	 * 登录
	 * @param is 
	 * @param os 
	 * @param path 类似数据库,服务端才直接面对数据库
	 */
	public static void login(DataInputStream is,DataOutputStream os,String path,Socket socket){
		try {
			//读取客户端输入的信息
			String[] str = is.readUTF().split("=");
			String name = str[0];
			String pwd = str[1];
			//读取文本数据信息
			FileInputStream fis = new FileInputStream(path);
			Properties pros = new Properties();
			pros.load( fis );
			String user = pros.getProperty( "user" );
			String pass = pros.getProperty( "pass" );
			//验证客户端输入的信息和文本数据信息是否一致。
			if (name.equals(user) && pwd.equals(pass)) {
				os.writeUTF("登录成功!");
			}else {
				//向客户端发送消息,询问是否需要注册。
				os.writeUTF("账户或密码错误或不存在,登录失败!如果需要注册,请输入  \"1\" ");
				register(is,os, path);//注册
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 注册,如果登录不成功,则选择调用这个方法
	 */
	private static void register(DataInputStream is,DataOutputStream os,String path){
		BufferedWriter writer;
		try {
			writer = new BufferedWriter(new FileWriter(path));
			//读取客户端输入的信息,输出到 user.txt 数据库中
			String[] str = is.readUTF().split("=");
			String name = str[0];
			String pwd = str[1];
			writer.write("user="+name);
			writer.newLine();
			writer.write("pass="+pwd);
			writer.close();//关闭缓冲流,才会写出数据
			//像客户端反馈注册结果消息
			os.writeUTF("恭喜注册成功!如果需要重新登录,请输入 \"2\"");

		} catch (IOException e) {
			e.printStackTrace();
		} 
	}
}package com.tiger.login;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
 * 网络编程中(socket)用户登录验证以及注册
 * @author tiger
 * @Date 2017年7月31日
 */
public class ClientLogin {

	public final static int PORT = 6666;//服务器端口号
	public final static String IP_ADDR = "127.0.0.1";//服务器地址

	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		DataInputStream is = null;
		DataOutputStream os = null;
		Socket socket = new Socket(IP_ADDR,PORT);
		//读取服务器端输入数据  
		is = new DataInputStream(socket.getInputStream());  
		//向服务器端发送数据  
		os = new DataOutputStream(socket.getOutputStream()); 

		login(is, os,socket);
		os.close();  
		is.close();
	}
	/**
	 * 注册
	 * @param is
	 * @param os
	 */
	private static void register(DataInputStream is,DataOutputStream os){
		Scanner sc = new Scanner(System.in);
		try {
			//将读取到的信息发送到服务器
			System.out.println("注册格式--【登录名=登录密码】");
			os.writeUTF(sc.nextLine());
			//接受来自服务器反馈的注册结果消息
			System.out.println(is.readUTF());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 登录
	 * @param is
	 * @param os
	 */
	public static void login(DataInputStream is,DataOutputStream os,Socket socket){
		Scanner sc = new Scanner(System.in);
		try {
			//发送到服务器做验证
			System.out.println("登录格式【登录名=登录密码】");
			os.writeUTF(sc.nextLine());
			//接收打印来自服务器端登录结果的反馈消息
			String ret = is.readUTF();
			System.out.println(ret);
			if (ret.equals("登录成功!")) {
				socket.close();
			}else if (sc.nextLine().equals("1")) {
				register(is, os);
			}else {
				System.out.println("欢迎下次光临!");
				socket.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
通过使用Socket编程,可以实现用户登录功能。具体步骤如下: 1、首先,需要指定一个端口,可以使用ServerSocket类创建一个服务器。 2、服务器通过调用accept()方法来阻塞式等待客户端的连接。 3、一旦客户端连接成功,服务器就可以使用输入输出流(I/O流)来获取客户端发送的登录用户信息。 4、服务器可以对接收到的登录用户信息进行分析和验证,判断登录是否成功。 5、根据验证结果,服务器可以向客户端发送相应的响应信息,例如登录成功或者登录失败。 6、完成登录验证后,服务器释放资源,断开与客户端的连接。 需要注意的是,这只是一个简单的示例,实际还需要考虑更多的安全性和扩展性问题。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于TCP协议的Socket编程——使用Socket编程实现用户登录](https://blog.csdn.net/qian_qian_123/article/details/82432815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [利用Java语言的Socket编程实现网络环境下两台计算机之间的字符聊](https://download.csdn.net/download/qq_20660115/88199653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [使用基于TCP协议的Socket编程模拟多用户网络登陆](https://blog.csdn.net/Daria_/article/details/90703537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值