1. 程式人生 > >java socket通訊時,中文字元亂碼的一個解決方法

java socket通訊時,中文字元亂碼的一個解決方法


可以使用:
in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));

socket示例:

import java.io.*;
import java.net.*;

public class SocketServerEx1 {
	public static void main(String args[]) {
		System.out.println("Server");
		
		ServerSocket serverSocket = null;
		Socket clientSocket = null;
		int connects = 0;
		try {
			serverSocket = new ServerSocket(82, 5);		//埠:82,最大連結數:5

			//最多連線10次
			while(connects < 10) {
				connects++;
				System.out.println("--------------------等待連線--------------------------");
				clientSocket = serverSocket.accept();	//等待連線
				System.out.println("第 " + connects + " 次連線");
				ServiceClient(clientSocket);
			}

			serverSocket.close();
		} catch(IOException ioe) {
			System.out.println("Error: " + ioe);
		}
	}
	
	public static void ServiceClient(Socket client) throws IOException {
		System.out.println("已連結");
		
		InputStreamReader inSR = null;
		OutputStreamWriter outSW = null;
		try {
			//讀取資料
			inSR = new InputStreamReader(client.getInputStream(), "UTF-8");
			BufferedReader br = new BufferedReader(inSR);
			
			outSW = new OutputStreamWriter(client.getOutputStream(), "UTF-8");
			BufferedWriter bw = new BufferedWriter(outSW);
			
			String str = "";
			while((str = br.readLine()) != null) {
				str = str.trim();
				System.out.println("收到客戶端訊息:" + str);
				
				bw.write("已收到資訊:" + str + " \r\n");	//向客戶端反饋訊息,加上分行符以便客戶端接收
				bw.flush();
			}

		} finally {
			//System.out.println("Cleaning up connection: " + client);
			inSR.close();
			outSW.close();
			client.close();
		}
		System.out.println("已斷開");
	}
}
import java.io.*;
import java.net.*;

public class SocketClientEx1 {
	public static void main(String[] args) {
		System.out.println("Client");
		try {
			Socket clientSocket = new Socket("localhost", 82);
			System.out.println("Client1:" + clientSocket);

			DataInputStream dataIS = new DataInputStream(clientSocket.getInputStream());
			InputStreamReader inSR = new InputStreamReader(dataIS, "UTF-8");
			BufferedReader br = new BufferedReader(inSR);
			
			DataOutputStream dataOS = new DataOutputStream(clientSocket.getOutputStream());
			OutputStreamWriter outSW = new OutputStreamWriter(dataOS, "UTF-8");
			BufferedWriter bw = new BufferedWriter(outSW);

			//輸入資訊
			byte bytes[] = new byte[100];
			while(true) {
				System.out.println("----------------------------------");
				System.in.read(bytes);
				String str = new String(bytes);
				str = str.trim();
				if (str == "exit") {
					break;
				}

				//傳送資料
				bw.write(str + "\r\n");		//加上分行符,以便伺服器按行讀取
				bw.flush();
				
				
				//接收資料
				while((str = br.readLine()) != null) {
					str = str.trim();
					System.out.println("伺服器回覆:" + str);
					break;
				}

			}
			
			inSR.close();
			dataIS.close();
			dataOS.close();
			clientSocket.close();
		} catch(UnknownHostException uhe) {
			System.out.println("Error:" + uhe.getMessage());
		} catch(ConnectException ce) {
			System.out.println("Error:" + ce.getMessage());
		} catch(IOException ioe) {
			System.out.println("Error:" + ioe.getMessage());
		} finally {
		}
	}
}