0

コードで複数のクライアントを作成する方法

program.cs

class Program
{
    static void Main(string[] args)
    {
        Server.ServerCode(5656);
    } 
}

Client.cs

class Client
{
    public static void ClientCode()
    {
            //SOCKET CONNECTION

            //int Port = (int)port;
            Console.WriteLine("......................CLIENT.........................");

            TcpClient client = new TcpClient("127.0.01", 5656);
            NetworkStream clientStream = client.GetStream();
            StreamReader sr = new StreamReader(clientStream);
            StreamWriter sw = new StreamWriter(clientStream);
            sw.AutoFlush = true;
                //CLOSING SOCKET
                clientStream.Close();
                client.Close();
                Console.ReadLine();


    }
}

私のサーバーコード:

サーブ.cs

class Server
{
    public static void ServerCode(object port)

    {

        //SOCKET CONNECTION

        int Port = (int)port;
        Console.WriteLine("................SERVER RUNNING......................");
        TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), Port);
        listener.Start();
        while (true)
        {
            TcpClient serverSite = listener.AcceptTcpClient();
            if (serverSite.Connected)
            {
                Thread c = new Thread((fileTransfer));
                c.Start(serverSite);
            }
        }
    }

    public static void fileTransfer(object clients)
    {


            Console.WriteLine("new client");*/
            TcpClient server = listener.AcceptTcpClient();//(TcpClient)clients;
            NetworkStream serverStream = server.GetStream();
            StreamReader sr = new StreamReader(serverStream);
            StreamWriter sw = new StreamWriter(serverStream);
            sw.AutoFlush = true;



            //CHECKING USERNAME AND PASSWORD
            Console.WriteLine("Connecting to Client... ");
            string fromClient_u = sr.ReadLine();
            Console.WriteLine("\n  Username: " + fromClient_u);
            string fromClient_p = sr.ReadLine();
            Console.WriteLine("\n  Password: *******");
            if (fromClient_u == "Client1" && fromClient_p == "123456")
            {

                Console.WriteLine("\nClient has Successfully Loged In. ");
                sw.WriteLine("Connection Complete...  ");                       //msg1
                sw.WriteLine("Successfully Connected to the Server.");          //msg2
                sw.WriteLine("Enter Some Informations for File Transfer...");   //msg3

            }
            //CLOSING SOCKET
            serverStream.Close();
            server.Close();
            Console.ReadLine();

    }   

}

動いていない。最初のスレッドが機能して終了し、次に 2 番目のスレッドが開始されます。しかし、このコードは 3 つの脅威を同時に生成します。私のポイントは、このコードによって複数のクライアントが作成され、それらが待機することです。最初のクライアントがサーバーでの作業を完了すると、2 番目のクライアントがサーバー接続を取得します。

4

2 に答える 2

2

サーバーコードも提供しないと、そこにも問題がないかどうかを知るのは困難です。比較するのに役立つ場合は、クイック クライアントおよびサーバー アプリケーションの作成方法に関するこの記事をチェックしてください。この例では、任意の数のクライアントも許可されていますが、クライアントはスレッドではなく独立したプロセスとして開始する必要があります。

一度に 1 つのクライアントのみを実行するには、開始コードを次のように変更してみてください。

    for (i = 0; i < 3; i++)
    {
        t[i].Start();
        t[i].Join();
    }
于 2013-02-10T21:31:58.357 に答える
1

簡単に聞こえるかもしれませんが、クライアントが終了してから次のプロセスを開始するまでプロセスをロックしたい場合は、ループして明示的に呼び出すだけです。

for (i=0;i<3;i++)
{
    Client.ClientCode();
}
于 2013-02-10T21:36:00.167 に答える