本案例使用.Net Socket的Tcp、Udp实现字串、文件、各种序列化对象的网络传输,同时封装了Tcp的粘包、半包处理细节,定义了网络封包格式,在发送端和接收端无需考虑内部传输细节。以下是类设计:
![]()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Json;
namespace TcpLabCommon
{
/// <summary>
/// Xml序列化
/// </summary>
public class XmlSerializeHelper:ISerializeHelper
{
public void Serialize<T>(System.IO.Stream stream, T item)
{
XmlSerializer serializer =
new XmlSerializer(item.GetType());
stream.Seek(0, System.IO.SeekOrigin.Begin);
serializer.Serialize(stream, item);
}
public T DeSerialize<T>(System.IO.Stream stream)
{
XmlSerializer serializer =
new XmlSerializer(
typeof(T));
stream.Seek(0, System.IO.SeekOrigin.Begin);
return (T)serializer.Deserialize(stream);
}
}
/// <summary>
/// 二进制序列化
/// </summary>
public class BinarySerializeHelper : ISerializeHelper
{
public void Serialize<T>(System.IO.Stream stream, T item)
{
BinaryFormatter formatter =
new BinaryFormatter();
stream.Seek(0, System.IO.SeekOrigin.Begin);
formatter.Serialize(stream, item);
}
public T DeSerialize<T>(System.IO.Stream stream)
{
BinaryFormatter formatter =
new BinaryFormatter();
stream.Seek(0, System.IO.SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
/// <summary>
/// Soap序列化
/// </summary>
public class SoapSerializeHelper : ISerializeHelper
{
public void Serialize<T>(System.IO.Stream stream, T item)
{
SoapFormatter formatter =
new SoapFormatter();
stream.Seek(0, System.IO.SeekOrigin.Begin);
formatter.Serialize(stream, item);
}
public T DeSerialize<T>(System.IO.Stream stream)
{
SoapFormatter formatter =
new SoapFormatter();
return (T)formatter.Deserialize(stream);
}
}
/// <summary>
/// Json序列化
/// </summary>
public class JsonSerializeHelper : ISerializeHelper
{
public void Serialize<T>(System.IO.Stream stream, T item)
{
DataContractJsonSerializer formatter =
new DataContractJsonSerializer(
typeof(T));
stream.Seek(0, System.IO.SeekOrigin.Begin);
formatter.WriteObject(stream, item);
}
public T DeSerialize<T>(System.IO.Stream stream)
{
DataContractJsonSerializer formatter =
new DataContractJsonSerializer(
typeof(T));
stream.Seek(0, System.IO.SeekOrigin.Begin);
return (T)formatter.ReadObject(stream);
}
}
}