Только писал, что портсканнер - это игрушка для чайников, но уже сейчас даю инструкции по его написанию. Я думаю пример будет полезен тем, кто хочет научиться работать с Winsock. Для примера я взял не свои исходники, т.к. принцип работы данного портсканнера намного легче для понимания.
Разместим на форме компоненты.
1
Фрейм(Frame) Ip + в нем Textbox ;Caption="127.0.0.1"
2
Фрейм(Frame) Port + в нем Textbox ;Caption="1" + Label ;Caption="To"
Textbox ;Caption="1024"
3
Фрейм(Frame) Connections + в нем Textbox ;Caption="3"
4
Фрейм(frame) Opened Ports + в нем ListBox
5
Kнопки OK, STOP, Clear
6
Tаймер
7
Label ; Caption="" - пусто
И, конечно, самое главное -Winsock. Т.к. я взял для примера чужой исходник, то сначала возникли проблемы с компиляцией. Но ведь в группе не один я кодер - звоним BYpasser'y, объясняем проблему и через пару секунд получаем решение.
Автор для облегчения работы использовал Control Array.Ок.Сделаем тоже самое.
Создадим на форме Winsock и сделаем ему Copy-Paste, на вопрос о создании массива ответим Да.Таким образом, после этого мы сможем определять переменные в момент создания процедур.Назовём его Wsk.
Сам код :
Declarations
Option Explicit
Private Sub Form_Load()
'Очищаем листбокс в начале работы
Me.ListBox1.Clear
End Sub
Private Sub Button3_Click()
'Очищаем листбокс ко кнопке Clear
Me.ListBox1.Clear
End Sub
Private Sub Button1_Click()
Dim intI As Integer 'Определяем переменную
lngNextPort = Val(Me.Text2)'Назначаем переменной начальный порт
For intI = 1 To Val(Me.Text4)'Назначаем максимальное кол-во соединений
Load Me.wsk(intI)'Грузим сокет
lngNextPort = lngNextPort + 1 'Увеличиваем значение (порт)
Me.wsk(intI).Connect Me.Text1, lngNextPort 'Коннектимся
Next intI ' Все заново
End Sub
Private Sub Button2_Click()
Dim intI As Integer
For intI = 1 To Val(Me.Text4)
Me.wsk(intI).Close
Unload Me.wsk(intI)
Next intI
' Аналог, только теперь закрываем сокет.
End Sub
Private Sub Timer1_Timer()
' Изменение показания Label
Label1.Caption = "Current Port: " + Str(lngNextPort)
End Sub
Private Sub wsk_Connect(Index As Integer)
'Если удалось приконнектиться
Me.ListBox1.AddItem "Port: " + Str(Me.wsk(Index).RemotePort)
'Добавляем в листбокс
Try_Next_Port (Index)
'Переходим к следующему порту
End Sub
Private Sub wsk_Error(Index As Integer, ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
ByVal HelpContext As Long, CancelDisplay As Boolean)
'Попытка реагировать на ошибку :-)
Try_Next_Port (Index)
End Sub
Private Sub Try_Next_Port(Index As Integer)
'Пытаемся сканить другой порт
Me.wsk(Index).Close
If lngNextPort < Val(Me.Text3) Then
Me.wsk(Index).Connect , lngNextPort
lngNextPort = lngNextPort + 1
Else
'Конец
Unload Me.wsk(Index)
End If
End Sub
Теперь последниий штрих. Project-Add Module-New. В новом модуле пишем :