I've created a multi-threaded TcpListener to receive request from clients.
I created a background worker to handle the endless loop that checks if there is a new connection.
This is the bw_start:Code:bw.WorkerSupportsCancellation = true; bw.WorkerReportsProgress = true; bw.DoWork += new DoWorkEventHandler(bw_start); if (!bw.IsBusy) bw.RunWorkerAsync();
HandleClient Methods:Code:private void bw_start(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; TcpClient clientSocket = default(TcpClient); tListener.Start(); int counter = 0; counter = 0; while (true) { counter += 1; clientSocket = tListener.AcceptTcpClient(); HandleClient client = new HandleClient(); client.startClient(clientSocket, Convert.ToString(counter)); } clientSocket.Close(); tListener.Stop(); }
Code:public void startClient(TcpClient inClientSocket, string clineNo) { this.clientSocket = inClientSocket; this.clNo = clineNo; ThreadPool.QueueUserWorkItem(new WaitCallback(doTransact)); }Code:private void doTransact(object state) { //some declarations here while (True) { try { if (clientSocket.Connected) { recv = networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); //this part receives an error that is realted about threading //some processing here //send response } else { break; } } else { break; } } }




Reply With Quote