1

私は魔女でプログラムを作ろうとしています。複数のクライアントがサーバーに接続します。しかし、同時に複数のクライアントを接続しようとすると、「長い時間」かかるため、問題があります。
私は接続するために非同期の方法を使用しています:

 public bool connect(string IP,int port)                                                                                                       
    { 

        try                                                                                                                                       
        {

            if (m_clientSocket == null)
            {                                                                                                      
                m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                                                                                                    
                IPAddress ip = IPAddress.Parse(IP.ToString());
                int iPortNo = System.Convert.ToInt16(port.ToString());

                IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);                                                                                                      
                client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
            }

        }catch()                                                                                                                
        {                                                                                                                                                                                                                                               
            return false;                                                                                                                         
        }
    } 


private void ConnectCallback(IAsyncResult ar)
    {
        try
        {
            Socket client = (Socket)ar.AsyncState;

            if (m_clientSocket != null)
            {
                if (m_clientSocket.Connected)
                {
                    client.EndConnect(ar);
                    // send next data here

                }
                else
                {
                    client.EndConnect(ar);
                    m_clientSocket.Close();
                    m_clientSocket = null;
                    state = CONNECT_ERROR; 
                }
            }

        }
        catch ()
        {   
        }
    }   

接続したいクライアントごとに、上記の2つのメソッドを含む新しいクラスを開きます。単純なforループよりも、メソッドを次々に呼び出します。

Wiresharkでは、次にサーバーに接続する必要がある時間は0.1秒であることがわかります。

なぜそんなに時間がかかるのか、何か考えはありますか?

どんな種類の助けにも感謝します。

4

0 に答える 0