0

インターネットからHTTP(またはその他)サーバーにアクセスできるようにするために、NATトラバーサルにすべてを試みています。これは前の質問ですが、運が悪いです。 NAT の背後にある HTTP サーバー

だから私は次のことをしようとしています

IE <--> agentC <---------NAT/Internet/.....----------->agentS<------->Apache サーバー

シナリオは多分…

1.「localhost:9999」のような IE でのユーザー入力アドレス (agentC)

2.agentC は Stun/TURN/ICE を使用して agentS と接続します

3.agentS はデータを Apache サーバーに中継し、クライアントに返信します。

また、次のことも参照し ます。ソケットを「リレー」することは可能ですか?

しかし、問題は次のとおりです。

1.agentC から agentS への接続は UDP である可能性がありますが、HTTP は TCP 上にあり、「ソケットまたはパケットをリレー」することは可能ですか?

2.agentS<---->Apache部分のテストコードを書いています。

((pp = popen("echo -e \"GET / HTTP/1.0\\n\\n\\n\"| nc localhost 80", "r")) == NULL)
.........

しかし、出力は常に「400 Bad Request」です。(コンソールで「echo -e "GET / HTTP/1.0\n\n\n"| nc localhost 80」と入力すると成功します)

3.単純なコンソール チャットルームを変更して、agentS と agentC にします。http データ (pic、download など) を運ぶことは可能ですか?

お待ちいただいてありがとうございます

4

1 に答える 1

0

実際にはソケットを中継するのではなく、データを中継します。たとえば、例の「agentS」は、「agentC」からの接続を受け入れるリスニングソケットを開きます。「agentC」から新しい接続を取得すると、「agentS」は Web サーバーに接続し、いずれかの接続 (「agentC」または Web サーバー) から読み取ったすべてが他の接続に送信されるループに入ります。

2 つの接続は独立しているため、一方が TCP で他方が UDP であるかどうかは問題ではありません。

また、「agentS」のデータを処理する必要がある場合は、実際にデータを持っているので簡単です。"agentC" と "agentS" の間のプロトコルは、HTTP である必要さえありません。プログラムがプロトコル変換を実行できるため、任意のプロトコルを使用できます。

補足として、データを Web サーバーに送信するときは、行を"\r\n"で終了し、ヘッダーは"\r\n"独自の行で 1 つで終了します。そのため、リクエスト"\r\n\r\n"後に送信するだけです。GET

于 2012-07-31T05:25:32.853 に答える