Вы можете создать новый класс, который может содержат Header Property
, то вы можете сериализовать этот класс затем преобразовать его в массив байтов
Пример:
Serializable()
Public class Packet
dim _header as packetHeader
dim _data as byte()
Public Property Header as packetHeader
Get
Return _Header
End Get
Set (byval value as packetHeader)
_header = value
End Set
End Property
Public Property Data as Object
Get
Return _Header
End Get
Set (byval value as Object)
_data = value
End Set
End Property
Public Sub New()
End Sub
Public Sub New(Byval header as packetHeader, Byval data as Object)
_header = header
_data = data
End Sub
Public Shared Function Serialize(myPacket as Packet) as Byte()
Dim fs as New MemoryStream
Dim formatter as New BinaryFormatter
formatter.Serialize(fs, myPacket)
Return fs.ToArray
End Function
Public Shared Function Deserialize(strm() as Byte) as Packet
Dim fs as New MemoryStream(strm)
Dim formatter as New BinaryFormatter
Return DirectCast(formatter.Deserialize(fs),Packet)
End Function
End Class
'Example of use
Public Enum packetHeader as Integer
Text = 0
Image = 1
'etc
End Enum
'Inside button click event (sending the packet)
Dim bitmap as new Bitmap("C:/example.png")
Dim data as Object = bitmap
Dim myPacket as new Packet(packetHeader.Image, data)
dim buffer() as byte = Packet.Serialize(myPacket)
'to deserialize the packet and check the header
Dim buffer() as byte = stream.Read
Dim myPacket as Packet = Packet.Deserialize(buffer)
Select myPacket.Header
Case packetHeader.Image
Dim image as Bitmap
image = DirectCast(myPacket.Data, Bitmap)
Case packetHeader.Text
Dim str as String
str = DirectCast(myPacket.Data, String)
End Select
'do your proccess inside the Select statement
Почему бы не вы первый отправить управляющий символ? 1 = текст, 2 = изображение и т. Д. ... тогда вы будете знать, какие данные вы получаете, и вы можете действовать соответствующим образом. –