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()); } }
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); } } }