0

ここ数日、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 属性を取り出して、サーバーに接続しています。次に、クライアントから取得した最初のリクエストをサーバーに送信しました。次に、上記のコードが起動し、リクエストと応答の中継を開始します。

これを行うより良い方法はありますか?そして、ページが完全にロードされないのはなぜですか? 感謝!

4

1 に答える 1

0

上に投稿したコードは完全に機能することがわかりました。この問題は、プログラムの他の部分でマルチスレッド化が不十分だったことが原因でした。それを修正すると、ページの読み込みが開始されました。

私はまだ興味があります。2 つのストリーム間でデータを渡すためのさらに優れた、または高速な方法はありますか?

于 2013-07-12T10:24:20.917 に答える