Socket 통신 이란?
Socket통신이란?
클라이언트와 서버간의 통신을 말한다.
소켓(Socket) : 소켓은 통신의 극점(endpoint)을 뜻한다.
두 프로세스가 네트워크상에서 통신을 하려면 양 프로세스마다 하나씩 두 개의 소켓이 필요하다.
각 소켓은 IP 주소와 포트 번호 두 가지를 결합하여 구별한다.
원격 프로시저 호출(Remote Procedure Call, RPC)
어떤 컴퓨터의 프로그램에서 다른 컴퓨터의 프로그램의 절차를 직접 불러내는 것을 말한다. 두 컴퓨터 프로그램 사이의 직접적인 통신이 가능하다. 네트워크 파일 시스템(Network File System, NFS)에서 주로 사용된다.
원격 메소드 호출(Remote Method Invocation, RMI)
원격 프로시저 호출(RPC)의 자바 버전이다. 자바 객체가 어느 곳에 있던 간에 서로 통신할 수 있게 한다.
1. 알고리즘
우선 서버가 소켓의 객체를 생성한다. 그리고 EndPoint 주소, 즉 소켓 ID로 서버를 Binding 시킨다. 클라이언트로부터 요청이 들어올 때까지 Listen 대기 상태에 있는다.
클라이언트도 소켓의 객체를 생성한다. 서버의 EndPoint로 Connection을 요청한다. 요청을 받은 서버의 Listener에 Accepter 함수가 처리를 한다. 그럼 두 개의 EndPoint가 Connection이 설정된다.
클라이언트의 Sender가 메시지를 보내면 서버는 메시지를 받고 출력한 뒤에 클라이언트에게 메시지를 보낸다. 그렇게 통신이 이루어진다. 통신이 끝나면 서버는 종료된다. 클라이언트가 서버로부터 메시지를 받으면 클라이언트도 따라서 종료된다.
2. 실행 결과 화면
3. 분석 검토
처음 SocketMain.cs 프로젝트를 실행 시켰을 때 SocketServer와 SocketClient를 호출하는 부분에서 ‘지정된 파일을 찾을 수 없다’는 오류가 발생했다. 파일의 경로는 맞았으나 해당 폴더에 .exe 파일이 생성이 되지 않아 에러가 나타난 것으로 파악이 되었다. 기존에 설치되어 있던 Visual Studio와 netcoreapp을 기존 버전보다 높은 버전으로 다시 설치하였고, 그 결과 프로젝트가 정상적으로 실행되었다.
클라이언트가 서버에게 요청하여 메시지를 보내고, 클라이언트가 보낸 메시지를 받은 서버는 다시 클라이언트에게 메시지를 받았다는 응답을 하는 실행 결과가 정상적으로 출력되었다.
만일 소켓 클라이언트를 강제로 끊어버리고 소켓 서버만 실행시키면 클라이언트가 응답할 때까지 계속 대기하고 있다는 화면이 실행결과에 나타난다.