Newbie Tcp Class to Multi-threading Class

  • Thread starter Thread starter Cor Ligthert
  • Start date Start date
How do i convert the following into a fully multithreaded tcp server and
remove the two addhandler(linerecieved,ondisconnected), i just know how
to remove the addhandler and make it into a separate thread.

any help would be appreciated.
thanks
jim

[UI form]
Option Strict On

Imports System.Threading
Imports System.Net.Sockets
Imports System.Net

Private myThread as thread
private mysocket as Tcplistener

Private Sub clsServer_load(...)
mythread = New threading.thread(addressof Dolisten)
mythread.start()
end sub
Pirvate dolisten()
dim localaddr = system.net.ipaddress
try
mysocket = new Tcplistener(localaddr,1234)
mysocket.start()
do
dim x as New clsClient(mysocket.AcceptTcpClient)
AddHandler x.Disconnected, AddressOf onDisconnected
AddHandler x.myReceived, AddressOf LineReceived
mcolClients.Add(x.ID, x)
Loop Until False
catch
end try
end sub

Public Sub LineReceived(ByVal sender As clsClient, ByVal strString As
String)
'process recive data here

end sub

[clsClient.vb]

Option Strict On

Imports System.Net.Sockets
Imports System.Text

'client class to handle the new client connected to the server
Public Class clsClient
Public Event Disconnected(ByVal sender As clsClient)
Public Event LineReceived(ByVal sender As clsClient, ByVal Data As
String)

Private mgID As Guid = Guid.NewGuid
Const BUFFER_SIZE As Integer = 512

Private mobjClient As TcpClient
Private marData(BUFFER_SIZE) As Byte
Private mobjText As New StringBuilder()

Public ReadOnly Property ID() As String
Get
Return mgID.ToString
End Get
End Property

Public Sub New(ByVal client As TcpClient)
mobjClient = client
mobjClient.GetStream.BeginRead(marData, 0, BUFFER_SIZE,
AddressOf DoStreamReceive, Nothing)
End Sub

Private Sub DoStreamReceive(ByVal ar As IAsyncResult)

Dim intCount As Integer
Dim clientdata As String = Encoding.ASCII.GetString(marData)
Try
SyncLock mobjClient.GetStream
intCount = mobjClient.GetStream.EndRead(ar)
End SyncLock

If intCount < 1 Then
RaiseEvent Disconnected(Me)
Exit Sub
End If

RaiseEvent LineReceived(Me, clientdata)
SyncLock mobjClient.GetStream
mobjClient.GetStream.BeginRead(marData, 0, BUFFER_SIZE,
AddressOf DoStreamReceive, Nothing)
End SyncLock

Catch ex As Exception
RaiseEvent Disconnected(Me)
End Try
End Sub

Public Sub Send(ByVal Data As String)
SyncLock mobjClient.GetStream
Dim w As New IO.StreamWriter(mobjClient.GetStream)
w.Write(Data)
w.Flush()
End SyncLock
End Sub

End Class
 
Back
Top