Все, вроде разобрался... Вроде пашет.
Nord777, я делаю HTTP прокси. Спасибо, Do Until NWS1.DataAvailable - интересно, использовал, работает )
И я выхожу на финальную прямую, как вывести обмен данными в отдельный поток. Код:
- Код: Выделить всё
Private Sub wait()
Try
Log("Слушаем Порт")
listener.Start()
Do
HTTPProvider.Flush()
Log("Ожидание клиента")
Do
If listener.Pending Then
server_tcpClient = listener.AcceptTcpClient()
Exit Do
End If
Threading.Thread.Sleep(100)
Loop
Log("- Клиент Подключен")
Log("-- Прием запроса от клиента")
Log("----- Принято: 0 байт")
server_networkStream = server_tcpClient.GetStream
Do Until server_networkStream.DataAvailable
Threading.Thread.Sleep(100)
Loop
Do
lenght = server_networkStream.Read(bytes, 0, bytes.Length)
If lenght < bytes.Length Then System.Threading.Thread.Sleep(100)
HTTPProvider.AddBinaryData(bytes, lenght)
LastItem("----- Принято: " & HTTPProvider.BinaryData.Length & " байт")
Loop While server_networkStream.DataAvailable
Dim Host As String = HTTPProvider.GetHost
Log("-- Подключение к серверу " & Host)
Dim client_tcpClient As New Net.Sockets.TcpClient
client_tcpClient.Connect(Host, 80)
Log("-- Передача запроса серверу")
client_networkStream = client_tcpClient.GetStream()
client_networkStream.Write(HTTPProvider.BinaryData, 0, HTTPProvider.BinaryData.Length)
HTTPProvider.Flush()
Log("-- Прием ответа от сервера")
Log("----- Принято: 0 байт")
Do Until client_networkStream.DataAvailable
Threading.Thread.Sleep(100)
Loop
Do
lenght = client_networkStream.Read(bytes, 0, bytes.Length)
If lenght < bytes.Length Then System.Threading.Thread.Sleep(100)
HTTPProvider.AddBinaryData(bytes, lenght)
LastItem("----- Принято: " & HTTPProvider.BinaryData.Length & " байт")
Loop While client_networkStream.DataAvailable
Log("-- Передача ответа сервера клиенту")
server_networkStream.Write(HTTPProvider.BinaryData, 0, HTTPProvider.BinaryData.Length)
server_networkStream.Close()
client_networkStream.Close()
server_tcpClient.Close()
client_tcpClient.Close()
Log("- Сессия завершена")
Loop
Catch e As ThreadAbortException
listener.Stop()
End Try
End Sub
Причем чтобы для каждого потока создавался свой элемент HTTPProvider.. И уж больно не хочется выносить метод в отдельный класс, можно как-нибудь без этого обойтись ? (Потому-что в ходе работы вызывается методы Log и LastItem, а они в свою очередь пишут инфу в ListBox на форме, а если в другом классе, то я не знаю как это сделать)
Заранее хочу всех поблагодарить за помощь Nord777, Чудик, tyomitch, GSerg, !Viper!, Sebas и keks-n. Спасибо!