2012-03-16 4 views
0

C에서 클라이언트 - 서버 프로그램을 개발 중입니다. 서버는 동일한 포트에서 여러 연결을 지원하고 연결된 각 클라이언트에 대해 새 프로세스를 만듭니다. 클라이언트는 서버에 몇 가지 명령을 보내고 거기에서 결과를 얻을 수 있습니다. 이 명령 중 하나는 서버에서 클라이언트로 파일을 전송하기위한 'get'입니다. (예 : abc.txt bcd.pdf ...).동일한 클라이언트에서 여러 연결

그러나이 전송 작업은 다른 스레드에서 수행되어야합니다. 예를 들어 클라이언트가 서버에서 3 개의 파일을 전송하도록 요청한 경우 3 개의 다른 스레드가 서버와 클라이언트 측 모두에서 작성됩니다. 따라서 클라이언트는 client_thread1, client_thread2, client_thread3을 작성하고 서버는 파일에 대해 server_thread1, server_thread2, server_thread3을 작성합니다. 그리고 첫 번째 파일은 server_thread1에 의해 client_thread1에 업로드되고, 두 번째 파일은 server_thread2에 의해 client_thread2에 업로드됩니다.

나는 그것이 붙어있는 유일한 지점이었다. 서버 스레드를 클라이언트 스레드와 어떻게 대응시킬 수 있습니까? 그래서 서버 쓰레드는 클라이언트 쓰레드와 만 통신하며, 서버와 클라이언트 측은 자신의 일을 자유롭게 수행한다.

도움 주셔서 감사합니다.

+4

FWIW, 각 전송에 대한 스레드를 만드는 것은 규모를 조정하려는 경우 매우 나쁜 생각입니다. 몇 가지 대안을 보려면 http://www.kegel.com/c10k.html을 참조하십시오. –

+0

왜? 세 파일을 동시에 전송하는 것은 그 파일을 전송하는 것보다 빠릅니다. 네트워크가 병목 지점이므로 다중 스레드를 할 수 없습니다. – EJP

답변

1

파일 전송간에 독립적 인 진행을 원할 경우 서버에 대한 다중 연결을 열어야합니다. 따라서 명령 채널을위한 별도의 소켓과 각 동시 파일 전송을위한 소켓을 가질 수 있습니다. 그런 다음 각 소켓을 별도의 스레드 (위에서 언급 한 것처럼 좋지 않음)에서 서비스하거나 poll과 같은 것을 사용하여 하나의 스레드에서 소켓 처리를 다중화 할 수 있습니다. 그리고 마찬가지로 FTP를 다시 작성했습니다.

또는 하나의 소켓에서 여러 파일 전송을 멀티플렉싱 할 수있는 방법을 생각해 낼 수 있습니다.

관련 문제