【问题标题】:how to create multiple clients in one server? [closed]如何在一台服务器上创建多个客户端? [关闭]
【发布时间】:2013-02-10 21:23:43
【问题描述】:

如何使用 is 代码创建多个客户端

程序.cs

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

客户端.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();


    }
}

我的服务器代码:

sereve.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();

    }   

}

它不工作。我希望第一个线程工作并结束,然后第二个线程开始。但是此代码会同时生成所有三个威胁。我的意思是,此代码将创建多个客户端,他们将等待。当第一个客户端完成与服务器的工作时,第二个客户端将获得服务器连接。

【问题讨论】:

  • 请扩展“它不工作”。你看到了什么错误?什么时候做什么?
  • lock (obje)是什么意思?
  • 没有错误。但是当整个代码运行时,所有线程同时工作。我希望一个线程一次访问一个服务器。 @ImmortalBlue
  • 我不知道 lock (obje) 的确切含义......我在互联网上看到了很多这样的代码......但我猜它并没有锁定任何客户端。 @HamletHakobyan
  • lock() 用于锁定多线程应用程序中的代码路径,以避免多个线程修改相同的值。它使调用线程等待直到释放。

标签: c# multithreading synchronization client-server


【解决方案1】:

如果不提供服务器代码,就很难知道那里是否也存在问题。如果有助于比较,请查看这篇关于如何create a quick client and server application 的文章。该示例还允许任意数量的客户端,尽管它们必须作为独立进程而不是线程启动。

要一次只运行一个客户端,您可以尝试如下更改起始代码:

    for (i = 0; i < 3; i++)
    {
        t[i].Start();
        t[i].Join();
    }

【讨论】:

  • 我现在想添加我的服务器代码。我该如何添加它。代码对于评论框来说太大了。
  • @Giliweed - 您应该能够编辑您的原始帖子并将其添加到那里。
  • 哇!有用。谢谢...@MarcF
  • @Giliweed - 我的荣幸。你最终得到了哪种解决方案?
  • 如果他不想异步处理任何事情,我认为使用线程毫无意义。
【解决方案2】:

听起来很简单,如果你想锁定进程直到客户端结束然后开始下一个,只需循环并显式调用它:

for (i=0;i<3;i++)
{
    Client.ClientCode();
}

【讨论】:

  • 这也有效.....哇!多谢。 @Mt.Scheniders
猜你喜欢
  • 2012-04-21
  • 2018-06-24
  • 2011-01-19
  • 2022-06-16
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2012-04-15
相关资源
最近更新 更多