コード例 #1
0
ファイル: MyTcpServer.cs プロジェクト: ytakani/C_Sharp_work1
        /**
         *  @brief       ServerThreadFuction
         *  @param[in]   none
         *  @return      void
         *  @note        TcpServerスレッド処理
         */
        void ServerThreadFuction()
        {
            while (true)
            {
                Thread.Sleep(1);

                if (stopReqFlag == true)        // 終了要求時
                {
                    // 各Client停止要求後
                    allClientEndProc();
                    break;
                }
                if (server.Pending() == true)   // true:Clientが接続してきた
                {
                    try
                    {
                        ServerSideTcpClient srvSideClient = new ServerSideTcpClient();
                        srvSideClient.setTcpClient(server.AcceptTcpClient()); // Accept待ち
                        clients.Add(srvSideClient);                           // Clinetリストに追加
                        srvSideClient.startProc();                            // Clientとの通信用スレッド起動
                    }
                    catch (System.IO.IOException ioerr)                       // 切断検知
                    {
                        Console.WriteLine(ioerr.Message);
                        allClientEndProc();
                    }
                }

                // 終了した ServerSideTcpClient クラス解放
                clientArrayMemberClear();
            }
        }
コード例 #2
0
ファイル: MyTcpServer.cs プロジェクト: ytakani/C_Sharp_work1
 /**
  *  @brief       allClientEndProc
  *  @param[in]   none
  *  @return      void
  *  @note        接続している全Client切断、Client処理スレッド終了依頼
  */
 void allClientEndProc()
 {
     for (int i = clients.Count - 1; i >= 0; i--)
     {
         ServerSideTcpClient srvSideClient = (ServerSideTcpClient)clients[i];
         clients.Remove(clients[i]);     // 要素の削除
         srvSideClient.endProc();        // Clientとの通信処理スレッド終了待ち
         srvSideClient.Dispose();        // Clientとの通信処理クラス破棄
     }
 }
コード例 #3
0
ファイル: MyTcpServer.cs プロジェクト: ytakani/C_Sharp_work1
 /**
  *  @brief       clientArrayMemberClear
  *  @param[in]   none
  *  @return      void
  *  @note        Client保持 ArraList から 切断したClient破棄
  */
 void clientArrayMemberClear()
 {
     for (int i = clients.Count - 1; i >= 0; i--)
     {
         ServerSideTcpClient srvSideClient = (ServerSideTcpClient)clients[i];
         if (srvSideClient.getEndFlag() == true)
         {
             clients.Remove(clients[i]); // 要素の削除
             srvSideClient.Dispose();
         }
     }
 }
コード例 #4
0
ファイル: MyTcpServer.cs プロジェクト: ytakani/C_Sharp_work1
        /**
         *  @brief       ServerThreadFuction
         *  @param[in]   none
         *  @return      void
         *  @note        TcpServerスレッド処理
         */
        void ServerThreadFuction()
        {
            while (true)
            {
                Thread.Sleep(1);

                if (stopReqFlag == true)        // 終了要求時
                {
                    // 各Client停止要求後
                    allClientEndProc();
                    break;
                }
                if (server.Pending() == true)   // true:Clientが接続してきた
                {
                    try
                    {
                        ServerSideTcpClient srvSideClient = new ServerSideTcpClient();
                        srvSideClient.setTcpClient(server.AcceptTcpClient());           // Accept待ち
                        clients.Add(srvSideClient);                                     // Clinetリストに追加
                        srvSideClient.startProc();                                      // Clientとの通信用スレッド起動
                    }
                    catch (System.IO.IOException ioerr)  // 切断検知
                    {
                        Console.WriteLine(ioerr.Message);
                        allClientEndProc();
                    }
                }

                // 終了した ServerSideTcpClient クラス解放
                clientArrayMemberClear();

            }
        }