学习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与.NET之间的通信问题。具体的问题是这样的: 客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端...
java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket
防止Socket传递汉字乱码,防止Socket传递汉字乱码
java socket发送SMTP邮件,支持SSL,支持发附件,抄送且发送的邮件标题内容都无乱码!
1、新建java项目; 2、把解压后的5个java类复制进去,修改包路径 3、先运行服务器类MJServer.java,再运行客户端类MyClient.java ...ps:因为本人系统用的是繁体字,可能会导致有乱码出现,修改一下编码格式即可
2.打印中文乱码问题 3.附录:完整测试代码 1.socket 编程控制台没有数据打印 在程序运行之前要注意一点,就是server端的测试方法要先让他跑起来。因为只有服务端跑起来才能接收客户端的数据,很简单的一个道理,但是...
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
flash XMLSocket java 通信(采用服务器推技术 解决了乱码 )本东西属于原创
在公司做项目的时候发现用Netty进行TCP/IP通信的Netty客户端接收到的数据进制乱码,经过摸索,终于成功解决了这个鸡肋的问题
相反,它使用 java 对象序列化并将结果发送到远程 TCP 套接字,在那里它假定您将消息反序列化回正在运行的 JVM 进程。 在我关于工作中,我需要在通过 TCP 发送之前将消息编码为 GELF json。 令我烦恼的是,...
主要介绍了 Java解决通信过程的中文乱码的问题的相关资料,需要的朋友可以参考下
编写socket通信,服务器和客户端分别是windows和linux.但是收到的数据不是乱码 什么原因 如何解决.zip
java NIO 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决
Java Socket 通信实现的聊天室 功能介绍 本程序基于CS架构实现,程序主要借鉴参考 ,并在原程序的基本框架下扩充了添加和删除好友以及保存聊天日志等功能。基本功能实现如下: 用Java的GUI界面编写聊天室服务器端和...
JAVA聊天室,基于C/S模式的JAVA聊天室
模拟HTTP协议,Java 发送 http 请求 (get 与 post 方法请求 ) , 以下代码经本人亲自调试可用! 可以直接使用之。 注意:通过 ...读取远程返回的数据时,必须设置读取编码,否则中文会乱码!
常见问题 读取Properties文件出现中文乱码 182 第9章 Java异常处理与反射机制 183 实例73 运用throws、throw、try与catch 183 实例74 throws声明异常的实例 185 实例75 自定义异常类 187 实例76 使用finally...
java写的程序作为服务端,windows下c++写的程序作为服务端,java端可以上传文件至windows服务端,解决了中文乱码的问题,端口和文件保存路径可自行配置,适合有需求的人参考
经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点...
1.开发环境:java1.8,win10,IDE:Eclipse,数据库Mysql 8.0.若无法运行程序,请自行调试。 2.导入sql文件,导入Eclipse工程文件夹。 3.默认的数据库连接用户名密码是root,123.若需要更改,请在server项目下dao包...