Tcp网络编程

功能:服务器端实现注册与登录功能,并将信息保存到properties文件,客户端通过tcp访问服务器:

首先实现一个文件操作类,分别用来加载文件和保存文件:

package FileTools;

import java.io.*;
import java.util.Properties;

public class FileTools {
    // 加载属性文件
    public static Properties LoadProperties() {
        Properties properties = new Properties();
        File file = new File("D:\\IntelliJ IDEA\\project\\NetWorkServerClient\\src\\main\\java\\regFile.properties");
        if (file.exists()) {
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(file);
                properties.load(fis);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
               if(fis != null) {
                   try {
                       fis.close();
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               }
            }
        }
        return properties;
    }

    // 保存属性文件
    public static void SaveProperties(String json) {
        String[] strings = json.substring(1, json.length() - 1).split(",");
        String id = strings[0].split(":")[1];

        FileOutputStream fos = null;

        try {
            // 这里设置为ture,表示追加
            fos = new FileOutputStream("D:\\IntelliJ IDEA\\project\\NetWorkServerClient\\src\\main\\java\\regFile.properties", true);
            Properties properties = new Properties();
            properties.setProperty(id, json);
            properties.store(fos, "");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

服务器端实现两个线程,分别是注册端口的接收和登录端口的接收:

注册线程:

package TcpServer;

import FileTools.FileTools;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;

/**
 * 实现注册功能
 */
public class RegisterThread extends Thread {
    @Override
    public void run() {
        try {
            // 创建ServerSocket
            ServerSocket listener = new ServerSocket(6666);
            // 调用accept方法
            System.out.println("注册服务器已经启动......");
            Socket socket = listener.accept();

            // 获取输入输出流
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));

            // 接收客户端发送的数据{id:1001,name:lina,pwd:123456,age:20}
            String json = br.readLine();
            String[] strings = json.substring(1, json.length() - 1).split(",");
            String id = strings[0].split(":")[1];

            // 加载属性文件
            Properties properties = FileTools.LoadProperties();
            if (properties.containsKey(id)) {
                bw.write("此用户已存在!");
                System.out.println("此用户已存在!");
            } else {
                FileTools.SaveProperties(json);
                bw.write("此用户注册成功!");
                System.out.println("此用户注册成功!");
            }

            bw.newLine();
            bw.close();
            br.close();
            socket.close();
            listener.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

登录线程:

package TcpServer;

import FileTools.FileTools;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;

public class LoginThread extends Thread {
    @Override
    public void run() {
        try {
            // 创建ServerSocket
            ServerSocket listener = new ServerSocket(7777);
            // 调用accept方法
            System.out.println("登录服务器已经启动......");
            Socket socket = listener.accept();

            // 获取输入输出流
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));

            // 接收客户端发送的数据{id:1001,pwd:123456}
            String json = br.readLine();
            String[] strings = json.substring(1, json.length() - 1).split(",");
            String id = strings[0].split(":")[1];
            String pwd = strings[1].split(":")[1];

            // 加载属性文件
            Properties properties = FileTools.LoadProperties();
            if (properties.containsKey(id)) {
                String replySuccess = "登录成功!";
                String replyError = "密码错误";

                String pwdCheckJson = properties.getProperty(id);
                String[] stringsCehck = pwdCheckJson.substring(1, pwdCheckJson.length() - 1).split(",");
                String pwdCheck = stringsCehck[2].split(":")[1];
                if (pwdCheck.equals(pwd)) {
                    bw.write(replySuccess);
                    System.out.println(replySuccess);
                } else {
                    bw.write(replyError);
                    System.out.println(replyError);
                }
            } else {
                String replyError = "用户名错误";
                bw.write(replyError);
                System.out.println(replyError);
            }

            bw.newLine();
            bw.close();
            br.close();
            socket.close();
            listener.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接下来是客户端的实现:

package TcpClient;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class UserClient {
    public static void main(String[] args) {
        System.out.println("----------请选择:1 注册,2 登录-----------");
        Scanner scanner = new Scanner(System.in);

        int choise = scanner.nextInt();
        switch(choise) {
            case 1:
                // 注册
                try {
                    RegitserClient();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case 2:
                // 登录
                try {
                    LoginClient();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            default:
                break;
        }
    }

    public static void RegitserClient() throws Exception {
        InetAddress ia = InetAddress.getLocalHost();
        Socket socket = new Socket(ia.getHostAddress(), 6666);

        // 获取输入输出流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));

        //  获取用户输入
        String json = GetUserRegInof();

        // 发送数据
        bw.write(json);
        bw.newLine();
        bw.flush();

        // 接收
        String reply = br.readLine();
        System.out.println("服务器回复:" + reply);

        // 关闭
        bw.close();
        br.close();
        socket.close();
    }

    public static String GetUserRegInof() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户编号:");
        int id = input.nextInt();
        System.out.println("请输入姓名:");
        String name = input.next();
        System.out.println("请输入密码:");
        String pwd = input.next();
        System.out.println("请输入年龄:");
        int age = input.nextInt();
        String json = "{id:"+ id +",name:"+ name +",pwd:"+ pwd +",age:"+ age +"}";

        return json;
    }

    public static void LoginClient() throws Exception {
        InetAddress ia = InetAddress.getLocalHost();
        Socket socket = new Socket(ia.getHostAddress(), 7777);

        // 获取输入输出流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));

        //  获取用户输入
        String json = GetUserLoginInof();

        // 发送数据
        bw.write(json);
        bw.newLine();
        bw.flush();

        // 接收
        String reply = br.readLine();
        System.out.println("服务器回复:" + reply);

        // 关闭
        bw.close();
        br.close();
        socket.close();
    }

    public static String GetUserLoginInof() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户编号:");
        int id = input.nextInt();
        System.out.println("请输入密码:");
        String pwd = input.next();
        String json = "{id:" + id + "," + "pwd:" + pwd + "}";

        return json;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值