15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как заставить Winsock работать с несколькими соединениями

Контрол Winsock позволяет создавать только одно соединение между двумя компьютерами. Однако, можно создать несколько соединений (несколько компьютеров к одному) путём создания нескольких экземпляров Winsock-а во время работы.

Добавьте контрол Winsock в Вашу форму и установите его индекс в 0, затем добавьте следующий код в программу сервера, к которому Вы собираетесь создавать несколько соединений:

Option Explicit
Public NumSockets As Integer
'//Public Variable to track number of Connections

Private Sub Form_Load()
	Caption = Winsock1(0).LocalHostName & _
		Winsock1(0).LocalIP
	Winsock1(0).LocalPort = 1066
	Print "Listening to " + Str(Winsock1(0).LocalPort)
	Winsock1(0).Listen
End Sub

Private Sub Winsock1_Close(Index As Integer)
	Print "Connection Closed :" & _
		Winsock1(Index).RemoteHostIP
	Winsock1(Index).Close
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, _
	ByVal requestID As Long)
	Print "Connection Request from : " & _
		Winsock1(Index).RemoteHostIP
	NumSockets = NumSockets + 1
	'//Увеличиваем количество Сокетов на один.
	Load Winsock1(NumSockets)
	'//Загружаем новый объект Winsock
	Winsock1(NumSockets).Accept requestID
	'//Ждём нового соединения
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal _
	bytesTotal As Long)
	Dim vtData As String
	Winsock1(Index).GetData vtData, vbString
	Print vtData
End Sub

Теперь Мы можем продолжать ожидать соединения.