Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сканер портов... Проблема!

4.3K
12 августа 2007 года
DeFaCe
45 / / 28.08.2005
Пишу скнер портов... И вот заинтересовал меня такой вопрос : может есть в .net'e функция для проверки порта на открытьсть?? Если нет, то помогите реализовать сканирование через другую функцию, которую я написал сам:
Код:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData))
{
    temp = "Ошибка WinSock!";
    this->listBox1->Items->Add(temp);
}
else
{
    u_short  ushTestPort;
    for (ushTestPort=130;ushTestPort<140;ushTestPort++)
    {
        temp = "Scaning " + ushTestPort;
        this->listBox1->Items->Add(temp); \\ !!!
        SOCKET sock;
        sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if (sock!=INVALID_SOCKET)
        {
            SOCKADDR_IN socketaddr;
            socketaddr.sin_family = AF_INET;
            socketaddr.sin_addr.s_addr = inet_addr(ip_scan);
            socketaddr.sin_port = htons(ushTestPort);
            int size=sizeof(socketaddr);
                   sock=connect(sock,(LPSOCKADDR)&socketaddr,size);
            if (sock != SOCKET_ERROR )
            {
                good = ushTestPort.ToString();
            }
            closesocket(sock);
        }
        else
        {
            temp = "Ошибка WinSock";
            this->listBox1->Items->Add(temp);
        }
    }
}
И так далее....
Проблема в том, что эта функция находится в теле обработчика нажатия на кнопку:) Дак вот, после нажатия на кнопку, прога "зависает", пока не завершится весь процесс сканирования. Мне нужно, чтобы можно было продолжать работать с прогой или хотябы чтобы было циклическое выполнение строки, обозначенной "!!!"... Надеюсь, изсложил всё понятно!

Заранее благодарю за ответы!
257
12 августа 2007 года
kosfiz
1.6K / / 18.09.2005
попробуй использовать Application.DoEvents(), чтоб не подвисало, хотя могу ошибаться.
4.3K
12 августа 2007 года
DeFaCe
45 / / 28.08.2005
Цитата: kosfiz
попробуй использовать Application.DoEvents(), чтоб не подвисало, хотя могу ошибаться.


Спасибо, работает! Теперь действительно, каждую секунду (понимаю, что это медленный сканер) появляется сообщение Scaning (port)... А вот ещё вопрос: как можно сделать, чтобы listBox сам прокручивал элементы при их появлении.... Ну чтбы если уже все видимые строки заняты, при появлении нового элемента он прокручивал их на 1 элемнт вверх....???

257
12 августа 2007 года
kosfiz
1.6K / / 18.09.2005
используй TopIndex listBox'а. вот пример:
 
Код:
int iNums = (listBox1.Height / listBox1.ItemHeight);
            for (int i = 0; i < 20; i++)
            {
                listBox1.Items.Add(i);
                if (listBox1.Items.Count > iNums)
                    listBox1.TopIndex = listBox1.Items.Count - iNums;
            }

вроде то, что тебе нужно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог