ftp,tcp 서버 클라이언트 질문

안녕하세요 ftp , tcp 관련 궁금한게 생겨서 질문드립니당

1번 컴퓨터에 ftp 서버를 구현하고 2번 컴퓨터에 ftp 클라이언트를 구현했습니다

근데 1번컴퓨터 ftp 서버에서 2번 컴퓨터인 클라이언트한테 서버파일을 다운받으라고 명령하려고

ftp 서버인 1번 컴퓨터에 tcp 클라이언트를

ftp 클라이언트인 2번 컴퓨터에는 tcp 서버를 만들었습니다

1번 컴퓨터 tcp 클라이언트로 2번 컴퓨터 tcp 서버에 명령을 보낼때

2번 컴퓨터가 명령을 처리할려면 계속 반복문으로 명령을 받을 대기를 계속 하고 있어야하나요??

1번 컴퓨터에서 명령을 보낼때만 처리할수있게 할순없나요???

제가 잘몰라서 질문이 이상할수도 있습니다 ㅠㅠ…

네! 물론 명령을 받을 때만 처리하도록 할 수 있습니다.

ManualResetEvent의 정의 및 예제 소스를 참고해보세요.

1개의 좋아요

반복문으로 대기를 하는 것도 가능하지만, 이렇게 되면 CPU가 의미없이 스핀을 돌면서 프로세스 점유율이 급상승하는 문제가 생깁니다.

이를 방지하기 위해서는 앞서 @dimohy 님께서 말씀해주신 것처럼 ManualResetEvent나 AutoResetEvent 같은 스레드 신호 제어기를 이용해서 신호가 들어왔을 때만 스레드가 이어서 실행되도록 관리해주는 것이 필요합니다.

아니면 면밀하게 제어하는 것이 어려울 경우 지금 해볼 수 있는 나이브한 구현 방식으로 Thread.Sleep을 이용해서 너무 길거나 짧지 않게 delay를 주고 while (true) 문을 프로그래밍하는 방법을 대안으로 생각해볼 수 있습니다. 이 경우, 연결이 제대로 처리되지 않을 가능성은 있지만 가볍게 개념 검증하기 위한 목적으로는 대신 택할 수 있으니 생각하는 구현 방식이 맞는지 간단히 점검해보는 용도로는 채택해보실 수 있는 나이브한 구현 방식이 될 것 같습니다.

1개의 좋아요

혹시

listener.Start();
TcpClient client = await listener.AcceptTcpClientAsync(); 대기 상태에서 명령어가 들어오면 처리후

listener.Stop();

종료한다음 재귀함수 처럼 자기 자신을 다시 호출하면

또 대기상태로 대기중이지 않을까요?? 그럼 반복문으로 계속 대기하지 않아도 되지않을가요??

1개의 좋아요

아직 tcp에 개념이 조금 약하신거 같네요.
https://www.aladin.co.kr/shop/UsedShop/wuseditemall.aspx?ItemId=539645&TabType=0

요책 한번 읽어 보시길 추천 드립니다.

ㅠㅠ 한번 읽어 보겠습니다 네트워크를 처음해봐서 아직 많이 부족합니다…

select, poll, iocp(윈도우), epoll, kqueue 를 공부하면 좋습니다.