基於TCP協議實現模擬用戶登錄的簡單Java實例

上一篇博客中,我們瞭解了基於UDP協議下的發送與接收信息並完成了簡單的java代碼實現工作,也在其中引用了一些前輩的博客來區分了UDP協議和TCP協議。那麼今天咱們就一起來看一下基於TCP協議完成數據的發送與接收服務。

關於UDP的java實例可以戳基於UDP協議發送和接收信息的簡單Java實例

主要步驟如下:

1、客戶端發送數據

2、服務端接收數據

3、服務端轉換數據

4、服務端發出數據

5、客戶端接收數據

因爲客戶端發送數據和服務端接收數據以及客戶端接收數據和UDP協議中的是一致的,包括創建Socket對象,創建數據,發送數據,接收數據等;因此便不再這裏過多贅述,如有需要可查看上方UDP中內容,這裏有詳細步驟,剩下的我們在註釋中體現。

客戶端代碼:

package com.zzxtit.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

/**
*author 秦飛陽
*/
public class UserClient {
	
	public static void main(String[] args) throws IOException {

		//創建客戶端Socket對象
		Socket s =  new Socket("127.0.0.1", 8888);
		//創建輸入流對象,讀取鍵盤錄入的信息
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("請輸入用戶名");
		String username = br.readLine();
		System.out.println("請輸入密碼");
		String password = br.readLine();
		
	//	PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		//創建輸出流對象
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//將鍵盤錄入的字符串輸出到服務端
		out.write(username);
		out.write(password);
		//創建輸入流對象,接收服務端發送過來的數據
		BufferedReader serverBr = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//讀取內容
		String result = serverBr.readLine();
		//輸出結果
		System.out.println(result);
		//關閉資源
		s.close();
	}

}

服務端代碼:

package com.zzxtit.tcp;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
*author 秦飛陽
*/
public class UserServer {
	
	public static void main(String[] args) throws IOException {
		
		//創建服務端Socket對象
		ServerSocket ss = new ServerSocket(8888);
		//接收對象,用到了accept方法
		Socket s = ss.accept();
		//創建輸入流對象,接收來自客戶端的數據內容
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//獲取內容
		String username = br.readLine();
		String passeord = br.readLine();
		//判斷是否正確
		boolean flag = false;
		if("manxiaoyu".equals(username)&&"123456".equals(passeord)) {
			flag = true;
		}
	//	PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		//創建輸出流對象
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//將登陸結果輸出到客戶端
		if (flag) {
			out.write("登錄成功");
		} else {
			out.write("登錄失敗");
		}
		//關閉資源
		s.close();
		//ss.close();
	}
}

好了,結束,在這裏需要注意的和UDP差不多,但又有所區別:

1、端口不能重複綁定,否則會報錯cannot bind 

2、因爲是建立連接的,所以可以"實時通信",如完成字母大小寫轉換,登錄,註冊等

3、在創建輸出流對象的時候可以使用BufferedWriter,也可以使用PrintWriter,只是後者自帶換行,且方法要用print

下面有一個基於tcp實現用戶輸入一個字符串,服務端返回一個相應大寫字符串的案例,大家如果感興趣可以看一看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章