[C#]TCP/IP 소켓통신의 이해 및 응용

Jaemoon Lee·2022년 10월 14일
0

[C샾]

목록 보기
5/13

내가 만들고 있는 프로그램은
서버↔[클라이언트/서버]↔클라이언트
의 역할을 수행하는 중계 프로그램이다.

그렇기 위해선 프로그램을 실행할 때
1. 클라이언트로써 어딘가에 있는 서버에 접속하는 기능
2. 서버로써 통신을 위한 영역을 오픈하는 기능

위 두가지를 독립적으로 기능하도록 구현해야 된다.

기본적인 설정으로..

개인적으로 변수 설정이 너무 헷갈려서 삽질을 많이 했다.
(ex) serverip라는 변수를 생성했는데, 이게 서버로 붙는 ip의 변수라는 뜻인지 내 프로그램이 서버가 되는 ip 변수라는 뜻인지.. 등등... 클래스 자체 client / server는 구분이 됐지만.. 여러 변수들을 여기저기 참조하다보니 굉장히 헷갈리기 시작했다...

코드적인 부분은 인터넷에 다른 소켓 통신이 잘 설명되어있고,
내부 클래스에 회사 보안과 관련된 코드들이 많으므로 따로 설명하지 않겠다.

  1. 클라이언트로써의 기능
    서버 PC와 프로그램 내 클라이언트 통신 기능은 다이렉트 LAN으로 연결되어 있다.
    이때 서버PC의 IP 설정은 192.168.3.15 / 포트는 5960으로 고정하였다.

= 그렇다면 클라이언트 또한 서버의 IP PORT에 맞춰 192.168.3.15 / 5960으로 접속하여야 한다.

  1. 서버로써의 기능
    프로그램 내 서버 기능과 클라이언트 OS는 같은 PC에서 구동된다.
    그러므로 프로그램 내 127.0.0.1 (자기IP) / 포트 8010으로 실행과 동시에 오픈하고,
    클라이언트는 마찬가지로 127.0.0.1 / 포트 8010으로 접속하게 된다.

각 클라이언트/서버 기능은 독립된 클래스로 구분되어있으며,
프로그램 실행과 동시에 루프문을 통해 Connect, Listen 기능을 쓰레드처럼 지속적으로 가동한다.


프로그램 실행 화면은 이런 느낌...
(1. 모션SW / 검사기OS가 각각 서버, 클라이언트로, 연결 성공시 초록불로 갱신된다. 중간에 DisConnec가 되면 다시 빨간불로...
2. 각 서버/클라이언트에 접속할 수 있는 IP는 이전 게시글 레지스트리를 통해 관리한다.
초기 프로그램 실행 시 각 레지스트리나 TextBox 값이 NULL이면 Settings 클래스 내의 Properties에 설정된 Defult 값으로... 레지스트리를 신규생성한다.
프로그램 종료 시 TextBox에 입력된 값으로 레지스트리가 수정(갱신)된다.)

일단 예외처리는 할 만큼 한거같은데... 실제 라인 환경에서.. 여러 경우나 여러 사람의 손을 타가면서 프로그램을 구동시켜볼 필요가 있다...

profile
초보개발세발자

0개의 댓글