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);
}
}
}
Сканер портов... Проблема!
Код:
Проблема в том, что эта функция находится в теле обработчика нажатия на кнопку:) Дак вот, после нажатия на кнопку, прога "зависает", пока не завершится весь процесс сканирования. Мне нужно, чтобы можно было продолжать работать с прогой или хотябы чтобы было циклическое выполнение строки, обозначенной "!!!"... Надеюсь, изсложил всё понятно!
Заранее благодарю за ответы!
попробуй использовать Application.DoEvents(), чтоб не подвисало, хотя могу ошибаться.
Цитата: kosfiz
попробуй использовать Application.DoEvents(), чтоб не подвисало, хотя могу ошибаться.
Спасибо, работает! Теперь действительно, каждую секунду (понимаю, что это медленный сканер) появляется сообщение Scaning (port)... А вот ещё вопрос: как можно сделать, чтобы listBox сам прокручивал элементы при их появлении.... Ну чтбы если уже все видимые строки заняты, при появлении нового элемента он прокручивал их на 1 элемнт вверх....???
Код:
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;
}
for (int i = 0; i < 20; i++)
{
listBox1.Items.Add(i);
if (listBox1.Items.Count > iNums)
listBox1.TopIndex = listBox1.Items.Count - iNums;
}
вроде то, что тебе нужно.