简体   繁体   English

套接字服务器可同时处理多个客户端请求

[英]Socket Server to handle multiple clients request concurrently

I want to handle multiple client's request concurrently using Socket Server. 我想使用Socket Server同时处理多个客户端的请求。 i have 10 clients, which can send request to my server at same time. 我有10个客户端,可以同时将请求发送到我的服务器。 How could i handle this? 我该如何处理? Is it possible? 可能吗?

With below code, i can handle only one request at a time, after completion of the request, server accepts next request. 使用下面的代码,我一次只能处理一个请求,完成请求后,服务器将接受下一个请求。 Due to this 10th client need to wait until 9 requests get complete. 由于这个第十个客户端需要等到9个请求完成。

Any help would be appreciated 任何帮助,将不胜感激

Below is the code i am using for Server Socket 以下是我用于服务器套接字的代码

Socket _serverSocket;
byte[] _buffer = new byte[255];

void SetupServer()
{
    try 
    {
        Console.WriteLine ("Setting up server...");

        IPEndPoint ipEndPoint = new IPEndPoint (IPAddress.Parse(_ip), _port);

        // create server socket to listen new client's connection
        _serverSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        _serverSocket.Bind (ipEndPoint);
        _serverSocket.Listen (100);

        _serverSocket.BeginAccept (new AsyncCallback (AcceptCallback), null);
    } 
    catch (System.Exception ex) 
    {
        Console.WriteLine ("Server failed :: {0}", ex.Message);
    }
}

void AcceptCallback(IAsyncResult ar)
{
    Socket clientSocket = _serverSocket.EndAccept(ar);

    _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);

    clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), clientSocket);
}

void RecieveCallback(IAsyncResult ar)
{
    Socket clientSocket = (Socket)ar.AsyncState;

    int received = clientSocket.EndReceive(ar);

    // check if client is disconnected?
    if (received == 0)
    {
        Console.WriteLine("client is disconnected...");

        return;
    }

    // do whatever you want with received data here...
    byte[] dataBuf = new byte[received];

    Array.Copy(_buffer, dataBuf, received);

    string text = Encoding.ASCII.GetString(dataBuf);

    Console.WriteLine("Received Data: {0}", text);

    // accept new request
    clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), clientSocket);
}

You should familiarize yourself with the concept of a "multi threaded server". 您应该熟悉“多线程服务器”的概念。 You should start a thread for each client which connects to the server. 您应该为连接到服务器的每个客户端启动一个线程。 So you can simultaneously handle multiple clients. 因此,您可以同时处理多个客户端。 Or you could use Tasks Parallel Library if you want to try newer .NET features. 或者,如果您想尝试更新的.NET功能,则可以使用Tasks Parallel Library

But there are many examples out there in the web that describe how to implement such a server. 但是网络上有许多示例描述了如何实现这样的服务器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM