1. 程式人生 > 其它 >【改進版】 Tcp協議服務端和客戶端傳輸資料

【改進版】 Tcp協議服務端和客戶端傳輸資料

前面一個版本的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();
        }

    }
}