0


1

TCPのようなものは私にとって決して機能しない

私はそれを行う方法を学ぶために、小さなクライアント/サーバーのものを取得しようとしています…​ しかし、多くのサンプルを使用した後、msdnについてもいくつかのチュートリアルを行った後、どれも機能していません。

私は次の例外を受け続けます:

System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 220.101.27.107:8000
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at t.MainForm.toolStripButton1344_Click(Object sender, EventArgs e) in C:\Users\Jason\Documents\Visual Studio 2008\Projects\t\t\MainForm.cs:line 1648

私が持っているコードは次のとおりです:

private void toolStripButton1344_Click(object sender, EventArgs e)
{
    String strHostName;
    string ipaddy;
    // Getting Ip address of local machine...
    // First get the host name of local machine.
    strHostName = Dns.GetHostName();
    Console.WriteLine("Local Machine's Host Name: " + strHostName);

    // Then using host name, get the IP address list..
    IPHostEntry ipEntry = Dns.GetHostByName(strHostName);
    IPAddress[] addr = ipEntry.AddressList;

    for (int i = 0; i < addr.Length; i++)
    {
        ipaddy = addr[i].ToString();
    }

    Socket st = new Socket(
        AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    IPEndPoint ipe = new IPEndPoint(addr[0], 8000);

    try
    {
        st.Connect(ipe);
    }
    catch (ArgumentNullException ae)
    {
        MessageBox.Show("ArgumentNullException : {0}" + ae.ToString());
    }
    catch (SocketException se)
    {
        MessageBox.Show("SocketException : {0}" + se.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Unexpected exception : {0}" + ex.ToString());
    }
}

誰かがこれがうまくいかない理由を理解するのを助けてくれますか?

ありがとうございました :)

4 Answer


1


クライアントと接続する前に、サーバーを起動しましたか?

また、使用しているポート(8000)がファイアウォールによってブロックされたり、別のプロセスによって占有されたりしていないことを確認してください。


0


基本的に、エラーメッセージには、ターゲットマシン(接続しようとしているマシン)がRST(リセット、つまり この場合は接続できません)。 つまり、相手側でリッスンするサーバープロセスはありません。

クライアント/サーバーソフトウェアは、2つの部分で構成されています。クライアントは、2番目の部分であるサーバーに接続しています。 サーバープロセスは接続を受け入れるためにtcpポートでリッスンする必要があり、クライアントはリッスンしているポートと共にサーバーのIPアドレスに接続する必要があります。


0


ソケット接続の作成をテストするだけの場合は、ホスト名として「google.com」を使用し、ポートとして80を使用します。 それは常にリスニングすることが保証されています。 もしそうでなければ、それはおそらく世界が停止したことを意味するでしょう。


0


なぜ機能しなかったのかがわかりました。 最近、私がインストールすることを選択したプログラムと共に小さなアプリケーション(私は知らなかった)がインストールされ、そのアプリケーションはいくつかのポートを使用していました。 私はなんとかそのアプリを取り除くことができました、そしてすべてがうまく機能しています:)

あなたの助けと提案をありがとう!