私は奇妙な問題を抱えており、誰かの助けが必要です。プロキシ チェーンの一部として機能するプログラムがあります。あるものからデータを取り込み、別のものに送信します。私が抱えている唯一の問題は、受信メソッドが何も取り込まないことです。そこでフリーズするだけです。私のプログラム:
チェーンに A、B、C、D の 4 つのノードがあるとします。
A はウェブブラウザ
B は私の C# プログラムです
C は私の C# クライアントです
Dはウェブサイト
B は C と A の両方をリッスンしています。非常に奇妙ですが、それを構成する必要があります。どうすればこのいまいましいプログラムを動作させることができますか? すでにかなりの量のコードをセットアップしていますが、何らかの理由で C は B から何も受信していません。C は B に正常に接続していますが、C は何も受信していません。誰でも私を助けることができますか?
すべてのポートを開いています。ファイアウォールは B と C の両方でオフになっています。A と B はどちらもローカル マシンで実行されています。いくつかの IP を与えるには:
A は 127.0.0.1:3056 に接続します
B は 127.0.0.1:3056 をリッスンし、B は IPAddress.Any:3055 をリッスンします。
C は MY_IP_ADDRESS:3055 に接続し、C は B が指定した場所に接続します
MY_IP_ADDRESS は、whatismyip.com から取得したグローバル IP アドレスです。
C が何も受信しないのはなぜですか? ここにいくつかの周囲のコードがあります:
クライアント (C):
Socket reqSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("MY_IP_ADDRESS"), 3055);
reqSocket.Connect(ip);
byte[] ReqData = new byte[8192];
MessageBox.Show("BYTE"); // This runs, (click OK)
reqSocket.Receive(ReqData);
String ReqString = Encoding.UTF8.GetString(ReqData);
MessageBox.Show(ReqString); // This does not
サーバー (B):
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 3056);
listener.Start();
Socket Localhost = listener.AcceptSocket();
listener.Stop();
TcpListener listener2 = new TcpListener(IPAddress.Any, 3055);
listener2.Start(50);
Socket toSocket = listener2.AcceptSocket();
listener2.Stop();
byte[] buf = new byte[8192];
Localhost.Receive(buf);
toSocket.Send(buf);
MessageBox.Show("Sent!"); // This runs
これらは両方とも実際に同時に開いています。