1

サーバー用に次のコードがあります。

namespace Test
{
    public class TCPListener
    {
        public static void Main()
        {
            TcpListener listener = null;
            TcpClient client = null;
            NetworkStream stream = null;
            BinaryWriter writer = null;

            try
            {
                listener = new TcpListener(new IPAddress(new byte[] { 127, 0, 0, 1 }), 5000);
                listener.Start();

                while (true)
                {
                    using (client = listener.AcceptTcpClient())
                    {
                        using (stream = client.GetStream())
                        {    
                            writer = new BinaryWriter(stream);
                            writer.Write("The message was received!");
                        }
                    }
                }
            }
            catch (SocketException)
            {
                //Catch socket exception
            }
        }
    }
}

このコードをコンソール アプリケーションに入力して telnet を使用すると"The message was received"、コマンド プロンプトにメッセージが表示されます。ここで、このコード (名前空間の変更) をコピーして Web アプリケーションにクラスとして貼り付けました。Web アプリケーション ソリューションは に展開されましたport 5000。サーバーとは別に、ユーザーが閲覧できるいくつかのページも含まれています。

残念ながら、telnet に移動して と入力"telnet 127.0.0.1 5000"すると、接続は確立されますが、何も受信しません。何が問題だと思いますか?どうすれば解決できますか?

4

1 に答える 1

1

マシュー、

名誉あるスキート氏がほのめかしたように、あなたは方程式の半分しか捉えていません。次に、クラスをインスタンス化し、Main() メソッドを呼び出す必要があります。

これを行う方法は次のとおりです。

TCPListener tcpListener = new TCPListener(); 
tcpListener.Main();

Web ベースのソリューション (コントローラー アクションまたはページ ロード コード ビハインド) のセットアップの主なポイントでそれを試してください。また、Main のメソッド シグネチャを変更します (静的を削除します)。

また、クラスを内部で呼び出しているようです:

listener = new TcpListener();

それは大きな問題を引き起こすでしょう...少しリファクタリングし、どのように機能するかについて再考することをお勧めしますMain。あなたの最初の主要な勝利は、衝突が起こっているように見えるので、TCPListener から別の名前に上記の例のクラスの名前を変更することです。

[編集]以下のコメントを読んで保存するには。Matthew がとった最終的な解決策は、コンソール ソリューションに戻って Web アプリケーションから呼び出すことでした。このようにして、彼はいくつかの勝利を収めました。

  • 既存のコンソール アプリはテスト済みで動作していた
  • 可動部品の緩い結合
  • 他のプロジェクトで使用できる拡張性
  • プロジェクトの他の時間に敏感な要素を実装して移行する能力

ここでのポイントは、「常にオプションを検討し、問題を解決するための単一のソリューションを超えて考えること」です。

于 2013-07-04T09:14:23.813 に答える