上一篇博客中,我們瞭解了基於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實現用戶輸入一個字符串,服務端返回一個相應大寫字符串的案例,大家如果感興趣可以看一看