tcp通讯实现登陆与注册 功能。  


    客户端与服务端连接的时候,就要提示客户端请选择功能。


    


    客户端注册的时候,用户名与密码都是发送给服务端 的,服务端需要把数据保存到服务端的文件上。


    


    登陆: 登陆的时候客户端输入用户名与密码发送给服务端,服务端需要校验,返回结果给客户端。


客户端


package com.cn.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年8月7日21:42:48
* Desc:
实现登陆与注册 功能。
客户端与服务端连接的时候,就要提示客户端请选择功能。

客户端注册的时候,用户名与密码都是发送给服务端 的,服务端需要把数据保存到服务端的文件上。

登陆: 登陆的时候客户端输入用户名与密码发送给服务端,服务端需要校验,返回结果给客户端。
*/
/**
* 客户端
* @author zhiyong
*
*/
public class LoginClient {
public static void main(String[] args) throws IOException {
//建立tcp客户端服务
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
//获取socket的输出流对象
BufferedWriter socketOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

//获取socket的输入流对象
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(true){
System.out.println("请选择功能: A(登陆) B(注册)");
//获取到键盘的输入流对象
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
String option = keyReader.readLine();//获取操作选项
if("A".equalsIgnoreCase((option = String.valueOf(option.charAt(0))))){//登陆
getInfo(keyReader, option, socketOut, socketReader);

}else if("B".equalsIgnoreCase((option = String.valueOf(option.charAt(0))))){
getInfo(keyReader, option, socketOut, socketReader);

}else{
System.out.println("无此功能。。");
}
}
}
public static void getInfo(BufferedReader keyReader, String option, BufferedWriter socketOut, BufferedReader socketReader)
throws IOException {
System.out.println("请输入用户名:");
String userName = keyReader.readLine();
System.out.println("请输入密码:");
String passWord = keyReader.readLine();
String info = option + " " + userName + " " + passWord + "\r\n";//发给服务端的 信息
socketOut.write(info);
socketOut.flush();
//读取服务器反馈的信息
String readLine = socketReader.readLine();
System.out.println(readLine);
}
}
————————————————



服务端


package com.cn.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
/**
* 登陆服务端
* @author zhiyong
*
*/
public class LoginServer extends Thread{
Socket socket = null;
static File file = new File("src/com/cn/tcp/usersInfo.properties");

public LoginServer(Socket socket) {
super();
this.socket = socket;
}

static{
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void run() {
while(true){
try {
//获取用户的输入流
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取用户的输出流
BufferedWriter socketOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//读取客户端输入的信息
String info = socketReader.readLine();
String[] datas = info.split(" ");
String option = datas[0];//用户的选择功能
String userName = datas[1];//账户名
String passWord = datas[2];//密码
if("a".equalsIgnoreCase(option)){//登陆
Properties properties = new Properties();
//加载配置文件
properties.load(new FileReader(file));
if(properties.containsKey(userName)){
String tempPassword = (String)properties.get(userName);
if(passWord.equals(tempPassword)){
socketOut.write("恭喜" + userName + "登陆成功。。\r\n");
}else{
socketOut.write("密码错误。。\r\n");
}
}else{
socketOut.write("用户名不存在请重新输入。。\r\n");
}
socketOut.flush();
}else if("b".equalsIgnoreCase(option)){//注册
//创建一个配置文件类
Properties properties = new Properties();
//先加载原来的配置文件
properties.load(new FileReader(file));
if(!properties.containsKey(userName)){//注册时输入的用户名 不存在
properties.setProperty(userName, passWord);
//生成配置文件
properties.store(new FileWriter(file), "用户信息");
socketOut.write("恭喜" +userName + "注册成功。。\r\n");
}else{//注册时输入的用户名存在
socketOut.write("用户名已经被注册,请重新输入\r\n");
}
socketOut.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9090);
while(true){
//不断接收请求
Socket socket = serverSocket.accept();
LoginServer loginServer = new LoginServer(socket);
loginServer.start();
}
}