`

Java的socket----乱码问题

 
阅读更多

 

学习socket编程,遇到乱码问题。。倒腾半天,至少有个解决方案。

 

服务端:

package mmo.net.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;

public class SServer
{
	public static void main(String[] args)
	{
		try
		{
			ServerSocket httpd = new ServerSocket(8000, 10,
					InetAddress.getByName("172.16.8.33"));
			
			Socket socket = httpd.accept();
			BufferedReader read = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			PrintWriter out = new PrintWriter(socket.getOutputStream());
			while (true)
			{
				String data = read.readLine();
				
				String data2 = new String(data.getBytes(Charset.forName("GBK")));
				
				System.out.println("data == > " + data2.toString());
				
				out.println(data2);
				out.flush();
				if(data.equals("end"))
					break;
			}
			socket.close();
		} 
		catch (UnknownHostException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

客户端:

package mmo.net.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SClient
{
	public static void main(String[] args) throws IOException
	{
		try
		{
			InetAddress inet = InetAddress.getByName("172.16.8.33");
			Socket client = new Socket(inet, 8000);
			BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			
			PrintWriter out = new PrintWriter(client.getOutputStream());
			BufferedReader wt = new BufferedReader(new InputStreamReader(System.in,"gbk"));
			while(true)
			{
				String data = wt.readLine();
				out.println(data);
				out.flush();
				if(data.equals("end"))
				{
					break;
				}
				String data1 = in.readLine();
				System.err.println("data1 == > " + data1);
			
			}
			
			client.close();
			
		}
		catch (UnknownHostException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

 

 

运行结果:

 

客户端// Sclient
有木有乱码!!!
data1 == > 有木有乱码!!!

 

 

//服务端
data == > 有木有乱码!!!

 

心得:

1.读写器默认是utf8格式

2.String data2 = new String(data.getBytes(Charset.forName("GBK"))); 其他编码无效

3.在读写器上设置gbk,也会出现乱码情况。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics