Results 1 to 2 of 2

Thread: Multiple client thread execution

  1. #1

    Thread Starter
    New Member
    Join Date
    Oct 2009
    Posts
    1

    Multiple client thread execution

    We have written a program in vb.Net 1.1 for client server using TCP architechture. The server code to initialize client is as follows

    ' This subroutine is used as a background listener thread to allow reading incoming
    ' messages without lagging the user interface.
    Private Sub DoListen()
    Try
    ' Listen for new connections.
    IP_ADD = Configuration.ConfigurationSettings.AppSettings.Item("IPAddress")
    PORT_NUM = Integer.Parse(Configuration.ConfigurationSettings.AppSettings.Item("PORTNUM"))
    'listener = New TcpListener(System.Net.IPAddress.Parse(IP_ADD), PORT_NUM)
    listener = New TcpListener(System.Net.IPAddress.Any, PORT_NUM)

    listener.Start()
    Do
    ' Create a new user connection using TcpClient returned by
    ' TcpListener.AcceptTcpClient()
    Dim client As New UserConnection(listener.AcceptTcpClient)
    SyncLock client
    ' Create an event handler to allow the UserConnection to communicate
    ' with the window.
    myConClass = New OnlineReceived
    'AddHandler client.LineReceived, AddressOf OnLineReceived
    AddHandler client.LineReceived, AddressOf myConClass.OnLineReceived
    UpdateStatus("New connection found: waiting for log-in")
    End SyncLock
    Loop Until False
    Catch ex As Exception
    'MessageBox.Show(ex.Message)
    End
    End Try
    End Sub

    The Stream receiver code is as follows
    ' This is the callback function for TcpClient.GetStream.Begin. It begins an
    ' asynchronous read from a stream.

    Private Sub StreamReceiver(ByVal ar As IAsyncResult)
    Dim BytesRead As Integer
    Dim strMessage As String

    Try
    ' Ensure that no other threads try to use the stream at the same time.
    SyncLock client.GetStream
    ' Finish asynchronous read into readBuffer and get number of bytes read.
    BytesRead = client.GetStream.EndRead(ar)
    End SyncLock

    ' Convert the byte array the message was saved into, minus one for the
    ' Chr(13).
    'strMessage = Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1)
    strMessage = Encoding.ASCII.GetString(readBuffer)
    RaiseEvent LineReceived(Me, strMessage)

    ' Ensure that no other threads try to use the stream at the same time.
    SyncLock client.GetStream
    ' Start a new asynchronous read into readBuffer.
    client.GetStream.BeginRead(readBuffer, 0, READ_BUFFER_SIZE, AddressOf StreamReceiver, Nothing)
    End SyncLock

    Catch e As Exception
    End Try
    End Sub

    The problem being faced is that while one client's request is being executed, before a response is sent, the request of another client executes simultaneously. Once the first connection is closed the second connection terminates at the same time without sending a response back.
    The connection between the second client and server is lost.
    Kindly help us with a solution to the same

  2. #2
    Frenzied Member
    Join Date
    Oct 2005
    Posts
    1,286

    Re: Multiple client thread execution

    Why not start a new thread when a client connects, and use a multi-threaded approach?
    Pete Vickers
    MVP - Device Application Development
    http://www.gui-innovations.com http://mobileworld.appamundi.com/blogs/

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width