java Socket与C#通信中中文乱码问题的解决方案
作者:网络转载 发布时间:[ 2012/12/13 9:53:40 ] 推荐标签:
近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的:
客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端传过来的都是乱码。于是上网查,希望可以找到解决方法,可是,网上有好多的答案,经过了很多的实验,都不能很好的解决。没办法只能靠自己一点一点的排查了。
经过一番努力,终找到了原因:C#和java的编码方式不同。虽然找到了原因,但是网上关于这个问题的答案也是百家争鸣,在这里给出源代码,希望对大家有帮助。
首先是客户端的java代码(这是比较简单的部分)
import java.net.*;
import java.io.*;
public class TCPCline{
public static void main(String[] args) throws Exception{
try{
//这里的IP地址是服务器的IP地址,端口号和服务器统一
Socket s = new Socket("IP地址",端口);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
String sendStr = "你好!hello";
//注意这里,getBytes()中的"UTF-8"
byte[] bs = sendStr.getBytes("UTF-8");
//这里使用的是write(),不是writeUTF(),至于为什么,可以查看java帮助文档,里面讲解了
dos.write(bs,0,bs.length);
//这里没有使用下面两句,是因为,当我们关闭客户端的时候,在服务器端也可以记录是哪一个客户端掉线了
//dos.close();
//s.close();
}catch(ConnectException connExc){
connExc.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
C#的服务器端代码,在这里说明一下,我们把服务器端的代码放到了一个类库TCPServer中
下面是错误日志类代码(客户端发送的消息,以及掉线通知都放到这里)
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
namespace TCPServer
{
/// <summary>
/// 错误日志类
/// </summary>
public class LogHelper
{
public static readonly object objLock = new object();
/// <summary>
/// 将错误写入.log文件下
/// </summary>
/// <param name="msg">错误信息</param>
/// <param name="ex">异常</param>
public static void Err(string msg, Exception ex)
{
string s = "";
if (ex != null)
{
s = "err:" + msg + ":" + ex.Message;
}
else
{
s = msg ;
}
//将错误输出到log文件中
string filename = AppDomain.CurrentDomain.BaseDirectory + "log/" + Convert.ToString(getUnixTime()) + ".log";
lock (objLock)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, true))
{
sw.WriteLine(s);
if (ex != null)
{
sw.WriteLine(ex.StackTrace);
}
sw.WriteLine("time:" + DateTime.Now.ToString());
sw.WriteLine("----------------------------------");
}
}
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11