java socket乱码

互联网 19-11-18

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乱码的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 乱码
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:什么是java手机

相关资讯