public void handleclient()
        {
            ArrayList entry = new ArrayList();

            entry.Add("Client address and port = " + clntSock.RemoteEndPoint);
            entry.Add("Thread = " + Thread.CurrentThread.GetHashCode());
            try {
                // SocketException 예외 상황으로 클라이언트와의 연결이 종료될 때까지 수신한다.
                int    recvMsgSize;                          // 수신된 메시지 크기
                int    totalBytesEchoed = 0;                 // 클라이언트로부터 수신한 바이트 수
                byte[] rcvBuffer        = new byte[BUFSIZE]; // 수신 버퍼

                // 클라이언트가 0의 값을 전송하여 연결을 종료할 때까지 계속 수신한다.
                try {
                    while ((recvMsgSize = clntSock.Receive(rcvBuffer, 0, rcvBuffer.Length,
                                                           SocketFlags.None)) > 0)
                    {
                        clntSock.Send(rcvBuffer, 0, recvMsgSize, SocketFlags.None);
                        totalBytesEchoed += recvMsgSize;
                    }
                }
                catch (SocketException se) {
                    entry.Add(se.ErrorCode + ": " + se.Message);
                }
                entry.Add("Client finished; echoed " + totalBytesEchoed + " bytes.");
            }
            catch (SocketException se) {
                entry.Add(se.ErrorCode + ": " + se.Message);
            }
            clntSock.Close();
            logger.writeEntry(entry);
        }
    public void startDispatching(TcpListener listener, ILogger logger,
                               IProtocolFactory protoFactory)
    {
        // Run forever, accepting and spawning threads to service each connection

        for (;;) {
          try {
        listener.Start();
        Socket clntSock = listener.AcceptSocket();  // Block waiting for connection
        IProtocol protocol = protoFactory.createProtocol(clntSock, logger);
        Thread thread = new Thread(new ThreadStart(protocol.handleclient));
        thread.Start();
        logger.writeEntry("Created and started Thread = " + thread.GetHashCode());
          } catch (System.IO.IOException e) {
        logger.writeEntry("Exception = " + e.Message);
          }
        }
        /* NOT REACHED */
    }
 public void startDispatching(TcpListener listener, ILogger logger, IProtocolFactory protoFactory)
 {
     // 각각의 반복적 서버를 구동하는 N개의 스레드를 생성한다.
     for (int i = 0; i < numThreads; i++)
     {
         DispatchLoop dl     = new DispatchLoop(listener, logger, protoFactory);
         Thread       thread = new Thread(new ThreadStart(dl.rundispatcher));
         thread.Start();
         logger.writeEntry("Created and started Thread = " + thread.GetHashCode());
     }
 }
Exemple #4
0
 public void startDispatching(TcpListener listener, ILogger logger,
                            IProtocolFactory protoFactory)
 {
     // Create N threads, each running an iterative server
     for (int i = 0; i < numThreads; i++) {
       DispatchLoop dl = new DispatchLoop(listener, logger, protoFactory);
       Thread thread = new Thread(new ThreadStart(dl.rundispatcher));
       thread.Start();
       logger.writeEntry("Created and started Thread = " + thread.GetHashCode());
     }
 }
 public void startDispatching(TcpListener listener, ILogger logger,
                              IProtocolFactory protoFactory)
 {
     // 무한히 실행하면서 연결 요청을 수락할 때마다 새로운 서비스 스레드를 생성한다.
     for (; ;)
     {
         try {
             listener.Start();
             Socket    clntSock = listener.AcceptSocket();   // 연결 요청을 대기하면서 블록을 건다.
             IProtocol protocol = protoFactory.createProtocol(clntSock, logger);
             Thread    thread   = new Thread(new ThreadStart(protocol.handleclient));
             thread.Start();
             logger.writeEntry("Created and started Thread = " + thread.GetHashCode());
         }
         catch (System.IO.IOException e) {
             logger.writeEntry("Exception = " + e.Message);
         }
     }
     // 이 곳으로는 도달하지 않는다.
 }
 public void rundispatcher()
 {
     // 무한히 실행하면서 연결 요청을 수락하고 처리한다.
     for (; ;)
     {
         try {
             Socket    clntSock = listener.AcceptSocket();   // 블록을 걸고서 연결을 대기한다.
             IProtocol protocol = protoFactory.createProtocol(clntSock, logger);
             protocol.handleclient();
         }
         catch (SocketException se) {
             logger.writeEntry("Exception = " + se.Message);
         }
     }
 }