您的位置 首页 java

java socket乱码

java socket乱码

解决方法:

首先在服务端使用InputStreamReader指定客户端的输入流为utf-8编码,以及使用OutputStreamWriter指定输出流为utf-8编码;

然后在客户端同样的设置utf-8编码即可。

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

示例:

Server:

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("已断开");	}}

Client:

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 {		}	}}

php中文网,大量的免费Java入门教程,欢迎在线学习!

文章来源:智云一二三科技

文章标题:java socket乱码

文章地址:https://www.zhihuclub.com/16780.shtml

关于作者: 智云科技

热门文章

网站地图