在项目中需要用C#做客户端,Java做服务器,直接使用Socket通信。通信过程中由于C#用的是小端序,Java使用的是大端序。C#在向服务器发送数据时,需要将字节数组的大端序》小端绪。还有在发送到Java服务器字符串需要加上”\r”,接收时去掉"\r"
在C#可以使用2中方式转换:
1>
#region 翻转字节数组
//因为C#和Java的byte字节的高位和地位是完全相反的,所以在接收字节数据需要翻转
private int ReadInt32(byte[] intBytes)
{
return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(intBytes, 0));
}
private short ReadShort(byte[] shortBytes)
{
return IPAddress.NetworkToHostOrder(BitConverter.ToInt16(shortBytes, 0));
}
private string ReadString(byte[] stringBytes)
{
string msg= Encoding.UTF8.GetString(stringBytes);
msg.Trim();
return msg;
}
private byte[] WriteInt32(int value)
{
value = IPAddress.HostToNetworkOrder(value);//把value转成相应的大端
byte[] temp = BitConverter.GetBytes(value);//这样直接取到的就是大端字节序字节数组
return temp;
}
private byte[] WriteShort(short value)
{
value = IPAddress.HostToNetworkOrder(value);//把value转成相应的大端
byte[] temp = BitConverter.GetBytes(value);//这样直接取到的就是大端字节序字节数组
return temp;
}
private byte[] WriteString(string msg)
{
byte[] temp= Encoding.UTF8.GetBytes(msg+"\r");
return temp;
}
#endregion
2>
#region 翻转字节数组 //因为C#和Java的byte字节的高位和地位是完全相反的,所以在接收字节数据需要翻转 private int ReadInt32(byte[] intBytes) { return Array.Reverse(BitConverter.ToInt32(intBytes, 0)); } private short ReadShort(byte[] shortBytes) { return Array.Reverse(BitConverter.ToInt16(shortBytes, 0)); } private string ReadString(byte[] stringBytes) { string msg= Encoding.UTF8.GetString(stringBytes);//只用这种方式直接得到的字节数组直接就是大端序 msg.Trim();//在从服务器接收的时候去掉"\r" return msg; } private byte[] WriteInt32(int value) { byte[] temp = BitConverter.GetBytes(value); Array.Reverse(temp); return temp; } private byte[] WriteShort(short value) { byte[] temp = BitConverter.GetBytes(value); Array.Reverse(temp); return temp; } private byte[] WriteString(string msg) { byte[] temp= Encoding.UTF8.GetBytes(msg+"\r");//因为java的字符串在后面会自动加上“\r”,在发送到服务器上时需要加上"\r" return temp; } #endregion