コード例 #1
0
ファイル: Scanner.cs プロジェクト: muratdincer/PortScanTool
        /// <summary>
        /// private scan method for a queue item
        /// </summary>
        /// <param name="scannerQueueObject"></param>
        private void Scan(ScannerQueueObject scannerQueueObject)
        {
            ScanCancellationToken.ThrowIfCancellationRequested();

            try
            {
                using (var tcpClient = new TcpClient())
                {
                    var timeout = TimeSpan.FromSeconds(10);

                    tcpClient.ReceiveTimeout = (int)timeout.TotalMilliseconds;
                    tcpClient.SendTimeout    = (int)timeout.TotalMilliseconds;
                    var asyncResult = tcpClient.BeginConnect(scannerQueueObject.IPAddress.ToString(), scannerQueueObject.Port, null, null);
                    var waitHandle  = asyncResult.AsyncWaitHandle;
                    try
                    {
                        if (!asyncResult.AsyncWaitHandle.WaitOne(timeout, false))
                        {
                            tcpClient.Close();
                            scannerQueueObject.Status = PortStatus.Closed;
                        }
                        else
                        {
                            scannerQueueObject.Status = tcpClient.Connected ? PortStatus.Open : PortStatus.Closed;
                        }

                        tcpClient.EndConnect(asyncResult);
                    }
                    finally
                    {
                        waitHandle.Close();
                    }
                }
            }
            catch
            {
                scannerQueueObject.Status = PortStatus.Closed;
            }

            OnPortCheckCompleted?.Invoke(this, new PortCheckCompletedEventArgs
            {
                IPAddress = scannerQueueObject.IPAddress,
                Port      = scannerQueueObject.Port,
                Status    = scannerQueueObject.Status
            });
        }
コード例 #2
0
ファイル: Scanner.cs プロジェクト: muratdincer/PortScanTool
        /// <summary>
        /// Creates and start a worker
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        private Task CreateWorker(CancellationToken cancellationToken)
        {
            return(Task.Factory.StartNew(() =>
            {
                while (!ScannerQueues.IsEmpty && ScannerQueues.TryDequeue(out ScannerQueueObject scannerQueueObject))
                {
                    ScanCancellationToken.ThrowIfCancellationRequested();
                    cancellationToken.ThrowIfCancellationRequested();

                    Scan(scannerQueueObject);
                }

                if (ScannerQueues.IsEmpty)
                {
                    OnFinished?.Invoke(this, new EventArgs {
                    });
                }
            }, ScanCancellationToken));
        }