`

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,也会出现乱码情况。

分享到:
评论

相关推荐

    java Socket与C#通信中中文乱码问题的解决方案

    在Java和C#之间进行Socket通信时,遇到中文乱码问题主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C#在处理字符串时可能使用其他编码,如GBK或ASCII。为了解决这个问题,我们需要确保两端在发送和接收...

    防止Socket传递汉字乱码

    通过以上策略,我们可以有效避免Java Socket在传输汉字时出现的乱码问题,保证网络数据交换的准确性和完整性。在实际开发中,要养成良好的编码习惯,始终关注字符编码的选择,确保程序的跨平台性和兼容性。

    JAVA socket收发数据,并支持断网自动连接

    - 数据传输时要考虑编码和解码问题,避免乱码。 - 注意网络延迟和带宽限制,优化数据传输效率。 总结起来,实现Java Socket收发数据及断网自动连接涉及了Socket的基本使用、异常处理、重连策略、心跳机制和线程...

    java c++ 通信之间的乱码解决方法

    Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C++在Windows XP环境下可能使用GBK编码。解决这个问题的关键在于确保数据在传输过程中保持正确的...

    JAVA SOCKET 编码实例

    Java提供了多种字符编码方式,如UTF-8、GBK等,需要根据实际需求选择合适的编码格式,并确保两端保持一致,以避免乱码问题。 9. **实例分析**:FMNotifServer这个文件可能是一个服务器端的示例代码,可能包含了上述...

    java-SWT-socket.zip_SWT_SWT socket

    7. **编码与解码**:在传输字符串数据时,需要考虑字符编码,比如使用`Charset`类进行编码转换,避免乱码问题。 8. **关闭资源**:在完成通信后,记得关闭`Socket`、`InputStream`和`OutputStream`,以释放系统资源...

    flash XMLSocket java 通信(采用服务器推技术 解决了乱码 )

    本文将深入探讨如何使用XMLSocket在Flash与Java之间进行高效、稳定的数据交换,并且特别关注如何解决在通信过程中可能出现的中文乱码问题。 首先,XMLSocket是Flash中的一个类,它提供了基于TCP/IP的双向通信功能,...

    java基础-socket编程控制台没有数据打印以及乱码问题

    在Socket通信中,处理中文字符时可能会遇到乱码问题。这是因为Java中的字符串(String)是以Unicode编码存储的,而网络传输通常是基于字节流的,如ASCII或GBK等编码。当从字节数组构建字符串时,如果没有正确指定字符...

    java socket 客户端和服务端例子

    Java Socket是Java编程语言中用于实现网络通信的一种基础工具,它允许两个应用程序通过TCP/IP协议进行数据交换。在这个"java socket 客户端和服务端例子"中,我们有两个主要组件:服务端(server)和客户端(client...

    Java开发Client客户端,连接Windows的Telnet服务器,解决了中文乱码问题

    本文将详细探讨如何使用Java开发这样的客户端,并解决在处理中文字符时可能出现的乱码问题。 首先,让我们了解Java中的Socket编程。在Java中,`java.net.Socket`类提供了TCP/IP套接字功能,可以用于建立客户端到...

    java socket文件夹传输

    需要注意的是,确保在发送和接收端保持一致的字符编码,以避免乱码问题。 5. **实现细节**: - **服务器端**:创建ServerSocket监听特定端口,等待客户端连接。接收到连接后,通过Socket的输入流接收文件数据,并...

    java socket发送SMTP邮件,支持SSL,支持发附件,抄送且发送的邮件标题内容都无乱码!

    java socket发送SMTP邮件,支持SSL,支持发附件,抄送且发送的邮件标题内容都无乱码!

    java socket线程cmd命令执行结合,可仿木马程序

    1、新建java项目; 2、把解压后的5个java类复制进去,修改包路径 3、先运行服务器类MJServer.java,再运行客户端类MyClient.java ...ps:因为本人系统用的是繁体字,可能会导致有乱码出现,修改一下编码格式即可

    java写的socket通信客户端

    发送和接收字符串时,需确保两端采用相同的编码方式,否则可能会出现乱码问题。 9. **安全性**: 对于涉及敏感信息的通信,可能需要使用SSL/TLS来加密数据,以保护数据的隐私。Java提供了`javax.net.ssl`包来支持...

    Java基于Socket局域网聊天软件

    Java中的`Charset`类提供了对不同字符集的支持,例如UTF-8,确保信息在网络传输过程中不会出现乱码。 6. **多用户管理**: 实现多人聊天功能,需要一个用户管理机制,可能涉及到用户认证、聊天室创建和管理等。这...

    Java c++ socket通信

    例如,都使用UTF-8编码,否则可能会遇到字符乱码问题。同时,数据格式也需要统一,比如JSON或自定义的二进制格式。 在实际应用中,Java和C++的Socket通信常用于分布式系统、微服务架构中,其中Java负责提供API或Web...

    java Sokcet远程调用shell

    4. **数据编码**:确保客户端和服务器之间正确处理字符编码,防止乱码问题。 六、示例代码片段 ```java // 服务器端 ServerSocket server = new ServerSocket(8080); while (true) { Socket client = server....

    Netty进制转换乱码问题

    在使用Netty进行TCP/IP通信时,我们可能会遇到数据进制转换导致的乱码问题。这个问题通常是由于数据编码不一致或者处理方式不当所引起的。在本文中,我们将深入探讨Netty中的进制转换和字符编码,并提供解决方案。 ...

    java socket聊天室

    为了确保消息的正确传递,开发者可能会使用编码和解码策略,例如UTF-8编码,来处理非ASCII字符集,以避免乱码问题。此外,还可能引入心跳机制,即客户端和服务器定期发送保持连接的信号,防止因网络延迟或断开而导致...

    java socket 网络聊天系统

    在Java中,我们需要确保客户端和服务器端对数据的编码方式一致,否则可能会出现乱码问题。 6. 异常处理:在网络通信中,网络中断、连接失败等问题是常态,因此良好的异常处理机制是必不可少的。我们需要捕获并适当...

Global site tag (gtag.js) - Google Analytics