我copy了一个数据类,但是,当我将utf8修改成Unicode的时候,汉字发送还是出现了问题。我觉得是那个长度的问题,但是,我不懂怎么弄的。using System;
using System.Collections.Generic;
using System.Text;namespace UClient
{
class Data
{
public Data()
{
this.cmdCommand = Command.Null;
this.strMessage = null;
this.strName = null;
} public Data(byte[] data)
{
this.cmdCommand = (Command)BitConverter.ToInt32(data, 0); int nameLen = BitConverter.ToInt32(data, 4); int msgLen = BitConverter.ToInt32(data, 8); if (nameLen > 0)
this.strName = Encoding.UTF8.GetString(data, 12, nameLen);
else
this.strName = null; if (msgLen > 0)
this.strMessage = Encoding.UTF8.GetString(data, 12 + nameLen, msgLen);
else
this.strMessage = null;
} public byte[] ToByte()
{
List<byte> result = new List<byte>(); result.AddRange(BitConverter.GetBytes((int)cmdCommand)); if (strName != null)
result.AddRange(BitConverter.GetBytes(strName.Length));
else
result.AddRange(BitConverter.GetBytes(0)); if (strMessage != null)
result.AddRange(BitConverter.GetBytes(strMessage.Length));
else
result.AddRange(BitConverter.GetBytes(0)); if (strName != null)
result.AddRange(Encoding.UTF8.GetBytes(strName)); if (strMessage != null)
result.AddRange(Encoding.UTF8.GetBytes(strMessage)); return result.ToArray();
} public string strName; //Name by which the client logs into the room
public string strMessage; //Message text
public Command cmdCommand; //Command type (login, logout, send message, etcetera)
}
}
using System.Collections.Generic;
using System.Text;namespace UClient
{
class Data
{
public Data()
{
this.cmdCommand = Command.Null;
this.strMessage = null;
this.strName = null;
} public Data(byte[] data)
{
this.cmdCommand = (Command)BitConverter.ToInt32(data, 0); int nameLen = BitConverter.ToInt32(data, 4); int msgLen = BitConverter.ToInt32(data, 8); if (nameLen > 0)
this.strName = Encoding.UTF8.GetString(data, 12, nameLen);
else
this.strName = null; if (msgLen > 0)
this.strMessage = Encoding.UTF8.GetString(data, 12 + nameLen, msgLen);
else
this.strMessage = null;
} public byte[] ToByte()
{
List<byte> result = new List<byte>(); result.AddRange(BitConverter.GetBytes((int)cmdCommand)); if (strName != null)
result.AddRange(BitConverter.GetBytes(strName.Length));
else
result.AddRange(BitConverter.GetBytes(0)); if (strMessage != null)
result.AddRange(BitConverter.GetBytes(strMessage.Length));
else
result.AddRange(BitConverter.GetBytes(0)); if (strName != null)
result.AddRange(Encoding.UTF8.GetBytes(strName)); if (strMessage != null)
result.AddRange(Encoding.UTF8.GetBytes(strMessage)); return result.ToArray();
} public string strName; //Name by which the client logs into the room
public string strMessage; //Message text
public Command cmdCommand; //Command type (login, logout, send message, etcetera)
}
}
strMessage.Length不等于Encoding.UTF8.GetBytes(strMessage)的长度。这部分转化有问题。