Guest Arsium Posted January 18, 2021 Posted January 18, 2021 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... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.