在流的创建时要制定编码,乱码与socket无关.
Client:
/** * * @author Kevin * */ public class SocketClient extends Thread { private Socket socket; private PrintWriter out; private BufferedReader in; private Handler handler; private boolean isRunning = true; private static SocketClient instance = null; public static SocketClient getInstance(boolean reConnect) { if (reConnect) { if (instance != null) { instance.stopRunning(); instance = null; } } if (instance == null) { instance = new SocketClient(); instance.start(); } return instance; } public Handler getHandler() { return handler; } public void setHandler(Handler handler) { this.handler = handler; } public boolean isConnected() { return socket.isConnected(); } private SocketClient() { try { socket = new Socket(AuthorizeUtils.host, AuthorizeUtils.port); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream(), "GB2312")), true); in = new BufferedReader(new InputStreamReader( socket.getInputStream(),"GB2312")); isRunning = true; } catch (Exception e) { } } public void sendMessage(String str) { out.print(str + "\n"); out.flush(); } public void run() { String msg = ""; try { while (isRunning) { msg = in.readLine(); if (msg != null && !msg.equals("")) { //业务处理 } } } catch (Exception ex) { ex.printStackTrace(); } } public void stopRunning() { try { this.isRunning = false; out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } }
Server:
public class Server extends Thread { PrintWriter out; BufferedReader in; public Server() { try { ServerSocket server = new ServerSocket(9999); Socket socket = server.accept(); System.out.println(socket.getInetAddress() + "已连接"); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "GB2312")), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GB2312")); } catch (Exception e) { e.printStackTrace(); } } public void sendMessage() { while (true) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); if (str != null && !str.equals("")) { out.print(str + "\n"); out.flush(); } } } @Override public void run() { String msg = ""; while (true) { try { msg = in.readLine(); if (msg != null) { System.out.println(msg); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Server server = new Server(); server.start(); server.sendMessage(); } }