2013-07-12 2 views
0

Я работаю над созданием прозрачного прокси-приложения в vb.net в течение нескольких дней. Все продолжалось до сих пор. У меня возникли проблемы с поиском наилучшего способа отразить данные от клиента на сервере и наоборот.Зеркальные данные между двумя потоками TCP - VB.NET

Я пробовал несколько разных методов. Вот мой последний. Он работает лучше всего, но страница никогда не заканчивает загрузку.

Do Until NeedToClose = True 

        If client.Connected = True Then 
         If client.GetStream.DataAvailable = True Then 
          Dim buffer(client.ReceiveBufferSize) As Byte 
          Dim length As Integer 
          Try 
           length = client.GetStream.Read(buffer, 0, buffer.Length) 'fills buffer with request 
           server.GetStream.Write(buffer, 0, length) 
          Catch ex As Exception 

          End Try 
         End If 

         If server.Connected = False Then 
          'client is holding connection open. server has already disconnected 
          stopWorker() 
         End If 

         If server.Connected = True Then 
          If server.GetStream.DataAvailable = True Then 
           Dim buffer(server.ReceiveBufferSize) As Byte 
           Dim length As Integer 
           Try 
            length = server.GetStream.Read(buffer, 0, buffer.Length) 'fills buffer with request 
            client.GetStream.Write(buffer, 0, length) 
           Catch ex As Exception 

           End Try 
          End If 

          If client.Connected = False Then 
           'server is holding connection open. client has already disconnected 
           stopWorker() 
          End If 
         End If 


        End If 

        If client.Connected = False And server.Connected = False Then 
         stopWorker() 
        End If 
       Loop 

Возможно, это не лучший способ для этого. Try..Catch - это просто точка останова, на которой можно сидеть. Я уже получил соединение с клиентом, вытащил атрибут Host и подключился к серверу. Затем я отправил первый запрос, который я получил от клиента на сервер. Затем код, который вы видите выше, запускается и запускает ретрансляцию запросов и ответов.

Есть ли лучший способ сделать это? И почему страница никогда не загружается полностью? Спасибо!

ответ

0

Оказалось, что код, который я написал выше, работает отлично. Я проследил проблему до некоторой бедной многопоточности в других частях моей программы. Как только я исправил это, страницы начали загружаться.

Мне все еще интересно. Есть ли еще лучший или более быстрый способ передачи данных между двумя потоками?

Смежные вопросы