1. 程式人生 > >新手學習-Tcp的服務端與客戶端的登入註冊系統

新手學習-Tcp的服務端與客戶端的登入註冊系統

客戶端

最近臨近考試 還有好多科目需要預習 這個只能等到考試後再改一下了 現在這個程式問題很多

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

/**
 * 登入系統v1.0
 * 賬號密碼只能按照標準格式輸入
 * 註冊不能防止重複
 */
class SocketS{

    public static void main(String[] args)throws Exception {
        //建立tcp服務
        Socket socket  = new Socket(InetAddress.getLocalHost
(),9090); //獲取到客戶端的輸出流物件 BufferedWriter socketWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //獲取客戶端的輸入流物件 BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //獲取鍵盤的輸入流物件 BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in
)); //接收來自服務端的反饋 //傳送資料 String line ; while(true) { System.out.println(socketReader.readLine()); System.out.println("請選擇功能: (a)註冊 (b)登入"); line = keyReader.readLine(); socketWriter.write(line + "\r\n"); socketWriter.flush
(); System.out.println("您的選擇已發出"); line = socketReader.readLine(); System.out.println(line); line = keyReader.readLine(); socketWriter.write(line + "\r\n"); socketWriter.flush(); System.out.println("您的選擇已發出"); line = socketReader.readLine(); System.out.println(line); } } //socket.close(); }

服務端

import java.io.*;
import java.net.*;

public class ServerS extends Thread {
    //輸出目標檔案
    static File file = new File("e:\\tcp.txt");
    //頂一個socket物件 在建構函式中傳入
    Socket socket;
    public ServerS(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run(){
        try {
            //建立檔案的輸入流
            BufferedReader fileReader = new BufferedReader(new FileReader(file));
            //建立檔案的輸出流
            BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file,true));
            // 建立服務端輸入流
            BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //建立服務端的輸出流
            BufferedWriter socketWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));


            while(true) {
                //確認系統連線正常 服務端傳送回執給客戶端
                socketWriter.write("連線系統成功..........\r\n");
                System.out.println("有客戶端連線。。。。。");
                socketWriter.flush();
                //讀取客戶的選擇
                String choose = socketReader.readLine();
                //判斷客戶的需求
                if ("a".equalsIgnoreCase(choose)) {
                    //註冊系統 傳入讀到的資料
                    try {
                        register(fileWriter, socketReader, socketWriter);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else if ("b".equalsIgnoreCase(choose)) {
                    //登入系統
                    try {
                        login(fileReader, socketReader, socketWriter);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    socketWriter.write("您的輸入有誤,請重新選擇\r\n");
                    socketWriter.flush();
                }
            }


        }catch (Exception e){
            e.printStackTrace();
        }
    }



    //登入系統 依次傳入檔案輸入流,服務端輸入流,服務端輸出流
    public static void login(BufferedReader fileReader,BufferedReader socketReader,BufferedWriter socketWriter) throws IOException {

        socketWriter.write("進入登入系統,請輸入賬號密碼 中間以空格分割\r\n");
        socketWriter.flush();
        //客戶端傳來的資料
        String account = socketReader.readLine();
        //旗標 標識是否登入成功
        boolean flag = false;
        //分割使用者發來的賬號和密碼
        String[] user = account.split(" ");
        String id = user[0];
        String password = user[1];
        //驗證賬號密碼
        String line;
        while ((line = fileReader.readLine()) != null && flag == false) {
            String[] str = line.split(" ");
            System.out.println(str.length);
            if (str[0].equals(id)) {
                if (str[1].equals(password)) {
                    flag = true;
                }
            }
        }
        if (flag == true) {
            flag = false;
            socketWriter.write("登入成功\r\n");
            socketWriter.flush();
        } else {
            System.out.print("客戶端賬號密碼錯誤");
            socketWriter.write("您的賬號或者密碼有誤\r\n");
            socketWriter.flush();
            System.out.print("客戶端賬號密碼錯誤");
        }
        //fileReader.close();
    }
    //註冊系統
    public static void register(BufferedWriter fileWriter, BufferedReader socketReader,BufferedWriter socketWriter) throws IOException {

        socketWriter.write("進入註冊系統,請輸入賬號密碼 中間以空格分割\r\n");
        socketWriter.flush();
        String account = socketReader.readLine();
        String[] user =account.split(" ");
        for(String str:user){
            fileWriter.write(str);
            System.out.println(str);
            fileWriter.write(" ");
            fileWriter.flush();
        }
        //註冊成功後要換行
        fileWriter.newLine();
        fileWriter.flush();
        //註冊成功
        socketWriter.write("註冊成功!!!\r\n");
        socketWriter.flush();
        /*//關閉資源
        fileWriter.close();*/

    }
    public static void main(String[] args) throws Exception {

        // 開啟tcp服務 監聽9090埠
        ServerSocket serverSocket= new ServerSocket(9090);
        while(true){
            //開啟執行緒
            new ServerS(serverSocket.accept()).start();
        }



    }
}

eclipse執行結果
本地的txt儲存文件