posted by 방랑군 2012. 1. 6. 22:06
       // 서버 TCP 리스너
        private TcpListener _server = null;
.
.
.
              // TcpListener로 서버 객체를 생성합니다.
                _server = new TcpListener(localHostEntry.AddressList[0], _svrPort);
.
.
.
         // 실제 스레드가 처리되는 메소드
        private void ServerThreadStart()
        {
            // 클라이언트 소켓 객체를 선언합니다.
            Socket clientSocket = null;

            while (!_isStop)
            {
                try { 
                
                    // 서버에 접속된 클라이언트 소켓을 받습니다.
                    clientSocket = _server.AcceptSocket();    //<-- 대기상태
                         : while 돌면서 이부분에서 대기 상태에 있다가 Client에서
                         (TcpClient _tcpClient = new TcpClient(_svrIP, _svrPort);)이 부분을 만나 Connect 하면서 다음
                         줄 명령라인으로 이동된다.

==> 설명 
clientSocket = _server.AcceptSocket();   이 곳에서 주구장창 클라이언트들을 기다린다.
 접속될때마다 각각 클라이언트들은  클라이언트마다 틀린 RemoteEndPoint ( IP :PORT)  즉, 포트만 틀린 종점을 받아
 서로 연결되어 수행이 이루어진다.  이때의 PORT 는 실제(컴퓨터) PORT 가 아닌 가상(SOCKET) PORT 이다.

Connection.LocalEndPoin는 자신의 IP와 Port를 표시하고, 
Connection.RemoteEndPoint는 자신의 LocalEndPoint에 접속된 다른 Socket의 IP와포트를 나타냅니다. 

 LocalEndPoin : 컴퓨터의 IP, PORT
RemoteEndPoint : SOCKET 의 IP, PORT <-- 여러 클라이언트 구별 키.