两个TCP流之间的镜像数据 - VB.NET

时间:2013-07-12 01:01:09

标签: .net vb.net http networking proxy

我一直在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属性,并连接到服务器。然后,我将从客户端获得的第一个请求发送到服务器。然后,您在上面看到的代码启动并开始中继请求和回复。

有更好的方法吗?为什么页面没有完全加载? 谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,我上面发布的代码运行得非常好。我将问题追溯到程序其他部分的一些糟糕的多线程。一旦我修复了,页面就开始加载了。

我仍然很好奇。是否有更好或更快的方式在两个流之间传递数据?