0

クライアントから要求されたファイルを取得するために別のサーバーに接続するサーバーがあります。

リクエストプロセスは次のとおりです。

Client ----> Server A ----> Server B

ファイルを送信するプロセス:

Server B ---> server A ----> client

クライアントをサーバー B に直接接続できません。

次のことが必要です。

サーバー A は、他のサーバーに到着したファイル データをクライアントに転送する必要があります (ファイル全体の受信を待たずに)。したがって、バイト単位で到着します。

その他の情報:

TCP socket;

Programming in C on Linux.

誰かがこれを実装するためのアイデアを親切に教えてくれますか?

アップデート

これが私の最初の試みです:

/* This code is refered to SERVER A */
/* s is the file descriptor for comunicate with SERVER B */
/* t is the file descriptor for comunicate with CLIENT */

int forward (int s, int t, char *buffer, size_t bytes){

    size_t n;
    ssize_t nread;
    ssize_t nsend;
    char c;

    for (n=1; n<bytes; n++)
    {
        nread=recv(s, &c, 1, 0);
        if (nread == 1)
        {
            nsend = send(t,c,1,0);
            if (nsend<=0) {
                return (-1);
            }
        }
        else if (nread == 0)
        {
            return (n-1); /* Errore */
        }
        else
            return (-1); /* Errore */
    }
    return (n);
}
4

2 に答える 2

1

*まず、サーバー B はポート 80 で http 接続をリッスンする必要があります (ここで xampp を使用してサーバーを作成できます)。

サーバー A (プロキシとして機能する) は、特定のポートで tcp 接続をリッスンする必要があります。このポートでクライアントから要求を取得するとすぐに、クライアントに接続し、dst-port で要求をサーバー B に転送します。 80 で tcp 接続を行い、サーバー B からの応答を待ちます。

サーバーBがリクエストを受信すると、データをサーバーAに転送し、サーバーAがクライアントに転送します。

TCP 接続を確立するには、beej ガイドによるソケット プログラミングを参照できます。ここでは簡単な実装を示します。一度に複数の接続を行うには、Pthreads を使用してスレッドを作成するか、fork() システム コールを使用してプロセスを作成できます。*

于 2013-06-13T10:45:27.557 に答える