07-04-14, 03:57 PM
في برامج نقل البيانات
انا افضل بدل نقل بيانات عشوائية ان تقوم بانشاء struct وتملأه بالبيانات وتحوله الى Byte array بواسطة Serialize
والجهة المستقبلة تسوي Deserialize وتسترجع الstruct من الbyte array
يعني اولا تسوي Class او يفضل عمل تركيب (struct)
ونجعله يدعم مبدأ الSerializable باضافة المواصفة :
ثانيا نستعمل الstruct وبعدين نحوله الbyte array بواسطة Serializa عشان نرسله بواسطة دالة Send :
--
الان الجهة المستقبلة ببساطة يمكنها ارجاع الbyte array الى الobject الاصلي وقراءة الرسالة :-
انا افضل بدل نقل بيانات عشوائية ان تقوم بانشاء struct وتملأه بالبيانات وتحوله الى Byte array بواسطة Serialize
والجهة المستقبلة تسوي Deserialize وتسترجع الstruct من الbyte array
يعني اولا تسوي Class او يفضل عمل تركيب (struct)
ونجعله يدعم مبدأ الSerializable باضافة المواصفة :
PHP كود :
<Serializable> _
Public Structure Message
'variable'
Public RtfMessage As String
Public senderName As String
Public image As Image = Nothing
'constractor'
Public Sub New(RtfMessage As String, senderName As String, image As Image)
Me.RtfMessage = RtfMessage
Me.senderName = senderName
Me.image = image
End Sub
End Structure
ثانيا نستعمل الstruct وبعدين نحوله الbyte array بواسطة Serializa عشان نرسله بواسطة دالة Send :
PHP كود :
Private Sub sendButton_Click(sender As Object, e As EventArgs)
Dim msg As New Message("<b>Hello i'm Mohammed", "Ali", Nothing)
Dim msgData As Byte() = ToByteArray(msg)
mySock.Send(msgData)
End Sub
Public Function ToByteArray(source As Object) As Byte()
Dim formatter = New BinaryFormatter()
Using stream = New MemoryStream()
formatter.Serialize(stream, source)
Dim data As Byte() = stream.ToArray()
stream.Close()
Return data
End Using
End Function
--
الان الجهة المستقبلة ببساطة يمكنها ارجاع الbyte array الى الobject الاصلي وقراءة الرسالة :-
PHP كود :
Private Sub receiveMessages_Click(sender As Object, e As EventArgs)
While True
'قراءة البيانات'
Application.DoEvents()
Dim buffer As Byte() = New Byte(999999) {}
Dim totalReceived As Integer = mySock.Receive(buffer)
'اكبر من البيانات التي تم استلامها bufferقد تكون قيمة '
'بعد اعادة كتابتها بصورة صحيحة msgData فهنا يتم حفظ البيانات في المتغير '
Dim msgData As Byte()
Using rw As New MemoryStream()
rw.Write(msgData, 0, totalReceived)
rw.Close()
End Using
''ارجاع الرسالة الى التركي'
Dim msg As Message = DirectCast(ToObject(msgData), Message)
'قراءة الرسالة'
richTextBox1.Rtf = msg.RtfMessage
MessageBox.Show("This Message was received from : " + msg.senderName)
If msg.image IsNot Nothing Then
pictureBox1.Image = msg.image
End If
End While
End Sub
Public Function ToObject(source As Byte()) As Object
Dim formatter = New BinaryFormatter()
Using stream = New MemoryStream(source)
stream.Position = 0
Dim obj As Object = DirectCast(formatter.Deserialize(stream, Nothing), [Object])
stream.Close()
Return obj
End Using
End Function

