新手學習-Tcp的服務端與客戶端的登入註冊系統
阿新 • • 發佈:2019-01-07
客戶端
最近臨近考試 還有好多科目需要預習 這個只能等到考試後再改一下了 現在這個程式問題很多
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();
}
}
}