【改進版】 Tcp協議服務端和客戶端傳輸資料
阿新 • • 發佈:2022-05-17
前面一個版本的tcp傳輸 有點問題
1.讀取內容 發現如果兩端不是同一種編碼就會讀取亂碼,下面改進下可以自定義編碼
2.只能讀取一種型別編碼文字
下面的版本改進編碼讀取問題,
注意:
讀取內容的時候,readlin(),需要傳送端那邊 結尾加 ”\n“ 換行符,否則會訊息阻塞
服務端:
import java.io.*; import java.net.ServerSocket; import java.net.Socket; /*** * 伺服器端 */ public class tcpServer { public static void main(String[] args) throws IOException { // 資料流傳輸 ServerSocket serverSocket =null; OutputStream outputStream =null; DataOutputStream dataOutputStream=null; Socket socket =null; InputStream inputStream =null; DataInputStream dataInputStream =null; // ====================================================== try { serverSocket = new ServerSocket(8080);//建立伺服器埠 System.out.println("---服務端已啟動---"); // 讓伺服器迴圈,一直處理 while (true){ socket = serverSocket.accept();//接收並返回一個物件 // 取出訊息 inputStream = socket.getInputStream();//獲取客戶 System.out.println("客戶已連線"); // 封裝進入的資訊 BufferedReader str = new BufferedReader(new InputStreamReader(inputStream, "gbk")); String s = str.readLine(); // System.out.println("輸入進入的資訊:"); System.out.println("接收到了客戶端請求:"+s); // 返回訊息給客戶端 outputStream= socket.getOutputStream(); BufferedWriter gbkout = new BufferedWriter(new OutputStreamWriter(outputStream, "gbk")); System.out.println(socket); dataOutputStream= new DataOutputStream(outputStream); String response= "helloaaaaaaaaaaaaaaaaaaaaaaa是是是"; gbkout.write(response); dataOutputStream.writeUTF(response); System.out.println("ok.."); // dataOutputStream.writeUTF(response); } } catch (IOException e) { e.printStackTrace(); } finally { serverSocket.close(); socket.close(); inputStream.close(); dataInputStream.close(); } } }