Jump to content
Xtreme .Net Talk

Asynchronous Operator | TCP | Serialization


Recommended Posts

Posted

Hello dear Sirs,

 

I need your help to make my server and client asynch.

 

 

Here is the code

 

Dll to serialize :

 

Public Class Class1

<Serializable()>

Public Class PacketMaker

Public Property File As Byte()

Public Property Type_Packet As PacketType

End Class

Public Enum PacketType As Integer

MSG = &H5057

File = &H5056

End Enum

End Class

 

 

 

 

Server :

 

Imports System.Net

Imports System.Net.Sockets

Imports System.Runtime.Serialization.Formatters.Binary

Imports System.Text

Imports System.Threading

Imports ClassLibrary1.Class1

Public Class Form1

Public T As TcpListener = New TcpListener(IPAddress.Any, 8080)

Private client As TcpClient

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

T.Start()

Task.Run(Sub() D())

End Sub

Public Sub D()

While True

client = T.AcceptTcpClient()

Task.Run(Sub() ThreadProc2(client))

 

Task.Run(Sub() ThreadProc(client))

 

End While

End Sub

 

Private Sub ThreadProc(ByVal obj As Object)

Dim client = CType(obj, TcpClient)

Dim B As BinaryFormatter = New BinaryFormatter()

Dim p As PacketMaker = New PacketMaker()

p.Type_Packet = PacketType.MSG

p.File = IO.File.ReadAllBytes("File1.zip")

B.Serialize(client.GetStream(), p)

End Sub

 

Private Sub ThreadProc2(ByVal obj As Object)

Dim client = CType(obj, TcpClient)

Dim B As BinaryFormatter = New BinaryFormatter()

Dim p As PacketMaker = New PacketMaker()

p.Type_Packet = PacketType.File

p.File = IO.File.ReadAllBytes("File2.zip")

B.Serialize(client.GetStream(), p)

 

End Sub

 

End Class

 

 

Client :

 

Imports System.Net

Imports System.Net.Sockets

Imports System.Runtime.Serialization.Formatters.Binary

Imports ClassLibrary1.Class1

 

Public Class Form1

Private T As TcpClient = New TcpClient()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim address As String = "192.168.0.15"

T.Connect(IPAddress.Parse(address), 8080)

Dim N As NetworkStream = T.GetStream()

Task.Run(Sub() R(N))

End Sub

Public Sub R(ByVal L As NetworkStream)

Dim sf As BinaryFormatter = New BinaryFormatter()

 

While True

 

Dim po As PacketMaker = CType(sf.Deserialize(L), PacketMaker)

 

 

IO.File.WriteAllBytes(po.Type_Packet.ToString(), po.File)

End While

End Sub

 

 

End Class

 

 

The server send 2 files and client need to receive them but here nothing is happening. No file is written (MSG & FILE). The only way to avoid problem I have found is to set a synclock here :

 

Private Sub ThreadProc(ByVal obj As Object)

 

SyncLock T

 

Dim client = CType(obj, TcpClient)

Dim B As BinaryFormatter = New BinaryFormatter()

Dim p As PacketMaker = New PacketMaker()

p.Type_Packet = PacketType.MSG

p.File = IO.File.ReadAllBytes("File1.zip")

B.Serialize(client.GetStream(), p)

End SyncLock

End Sub

 

Private Sub ThreadProc2(ByVal obj As Object)

 

SyncLock T

 

Dim client = CType(obj, TcpClient)

Dim B As BinaryFormatter = New BinaryFormatter()

Dim p As PacketMaker = New PacketMaker()

p.Type_Packet = PacketType.File

p.File = IO.File.ReadAllBytes("File2.zip")

B.Serialize(client.GetStream(), p)

 

End SyncLock

 

End Sub

 

Continue reading...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...