1

コースでの作業のために、完全に分散化されたトークン リング プロトコル アプリケーションを実現する必要があります。だから、ここにあります:

起動されたすべてのアプリ (ノード) には独自の ID があり、現在のノードは前のノードのサーバーであり、リング内の次のノードのクライアントです (したがって、ノード間に 2 つの並列 TCP 接続があります)。ユーザーは、現在のノードのポート、IP アドレスと他のサーバーノードのポート 1、パケット (トークン) のデータ、ノードの現在の ID と宛先 ID を入力します。

受信したトークンをリング内の次のノードに送信する方法がわかりません。どうすれば 2 つの TCP 接続を実現できますか? ノードごとに 2 つのスレッド (サーバー機能用に 1 つ、クライアント用に 1 つ) を開始しようとしましたが、これは間違っていると思います。

また、«client» と «server» の 2 つの関数を実装しました。

サーバ:

/*some code...*/
if (server.Pending()) {
    /*...some code*/
    NetworkStream stream = client.GetStream();
    int i = stream.Read(bytes, 0, bytes.Length);

    if (i > 0) {

        recv = /*some code*/
        Invoke(AddTextDelegateS, "Someone connected. Waiting for mine token...");
        answer = /*some code*/

        //extracting destination node ID
        int dest_new = /*some code*/
        dest_id = dest_new;

        if (current_id == dest_id) {
            // OK, token received right node
            Invoke(AddTextDelegateC, "Node with id " + current_id.ToString() + " recieved token with data:");
            Invoke(AddTextDelegateC, recv);

        } else {

            //in this part I'm trying to send <------------
            Thread tmp_thread = new Thread(startclient);
            tmp_thread.IsBackground = true;
            tmp_thread.Start();
            //

        }
        byte[] answer_bytes = /*some code */
        stream.Write(answer_bytes, 0, answer_bytes.Length);
        /*....*/
4

0 に答える 0