我的想法 - >客戶端服務器系統通過TCP套接字交換文本消息(字符串)。我希望客戶端和服務器之間的協議基於XML。而且因爲套接字之間的信息是作爲byte
發送的,所以我必須施放。所以這裏是我所做的: 類別TheMessage
與string
類型的財產。我將該類的對象與字符串作爲對象的屬性發送,並使其從Object
到byte[]
到XmlSerialization
。另一方面,我採用反向工程。 這是我如何序列化和發送從客戶端到服務器:通過套接字對象的XML序列化
msg.Message = Console.ReadLine();
byte[] writeBuff = XmlRefacrotClient.ObjectToByteArray(msg);
Stream stm = client.GetStream();
stm.Write(writeBuff, 0, writeBuff.Length);
這是我使用的序列化方法:
public static byte[] ObjectToByteArray(TheMessage obj)
{
try
{
MemoryStream ms = new MemoryStream();
XmlSerializer xmlS = new XmlSerializer(typeof(Message.TheMessage));
XmlTextWriter xmlTW = new XmlTextWriter(ms, Encoding.UTF8);
xmlS.Serialize(xmlTW, obj);
ms = (MemoryStream)xmlTW.BaseStream;
return ms.ToArray();
}
catch(Exception)
{
throw;
}
}
這是我收到的數據在服務器端:
byte[] readBuff = new byte[1024];
s.Receive(readBuff);
String str = (XmlRefactorServer.ByteArrayToObject(readBuff)).ToString();
Console.WriteLine(str);
這是反序列化的方法:
public static Object ByteArrayToObject(byte[] arr)
{
try
{
XmlSerializer xmlS = new XmlSerializer(typeof(Message.TheMessage));
MemoryStream ms = new MemoryStream();
XmlTextWriter xmlTW = new XmlTextWriter(ms, Encoding.UTF8);
return xmlS.Deserialize(ms);
}
catch(Exception)
{
throw;
}
}
一切運行平穩,直到ByteArrayToObject
的return
method.I與上return xmlS.Deserialize(ms);
行描述There is an error in XML document (0, 0).
得到InvalidOperationException
。
有什麼建議嗎?
你採取了字節數組並將其轉換爲字符串或東西,看看它看起來像什麼?也許你可以發現XML中的錯誤,如果你看到它的樣子。 – guysherman
我首先通過轉換string - > byte array - > string(來測試連接本身)並且它工作正常。我在雙向接收和發送消息。 – Milkncookiez