通常Socket數據傳送過程中,我們把對象轉化為byte數組,接手時再將數組轉化為對應的對象,這一過程可以通過序列化完成
前提是傳輸的對象必須標記為可以序列化的,下面舉個例子:
Package為 我們要傳送接收的對象消息
[Serializable]
public class Package
{
/// <summary>
/// 包類型
/// </summary>
public PackageType PackType { get; set; }
/// <summary>
/// 源IP及端口
/// </summary>
public string Src_IP_Port { get; set; }
/// <summary>
/// 目標IP及端口
/// </summary>
public string Desc_IP_Port { get; set; }
}
發送數據時,我們通過BinaryFormatter對象將Package對象序列化進MemoryStream內存流中,然后得到Byte數組進行傳遞。
private void Send(Package pack, Socket s)
{
BinaryFormatter formatter = new BinaryFormatter();
byte[] retbuff = new byte[1];
using (MemoryStream mStream = new MemoryStream())
{
formatter.Serialize(mStream, pack);
mStream.Flush();
s.Send(mStream.GetBuffer(), (int)mStream.Length, SocketFlags.None);
s.Receive(retbuff, 1, SocketFlags.OutOfBand);
if (retbuff[0] == 0)
{
Send(pack, s);
}
}
}
接收數據時將byte數組寫入內存流,通過BInaryFormatter的反序列化將內存流中的數據轉化為對象
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream mStream = new MemoryStream())
{
mStream.Write(buffer, 0, ret);
mStream.Flush();
mStream.Seek(0, SeekOrigin.Begin);
pack = (Package)formatter.Deserialize(mStream);
}
————————————————
版權聲明:本文為CSDN博主「IT界的卡卡西」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cjb_king/article/details/89399213