2013-05-07 7 views
0

나는 오디오 데이터를 처리하고 그것을 오디오 드라이버에 전달하는 서버 프로그램을 가지고있다.더 좋은 방법은 무엇입니까? 파이프 1 개와 소켓 1 개 또는 소켓 1 개?

서버 프로그램은 오디오 데이터를 복사하고 복사본을 초 스레드의 명명 된 FIFO에 저장합니다.

FIFO의 반대쪽에 클라이언트가 없으면 FIFO 스레드를 차단하기 때문에 중요하지 않습니다.

이제 '볼륨 높이기, 더 빠르게 재생하기'와 같은 '제어'기능을 추가하고 싶습니다. 결국 연결된 클라이언트는 서버 프로그램을 제어 할 수 있습니다.

중요 사항 : 클라이언트가 결국 close() 또는 중단을 통해 연결을 끊으면 서버가이를 감지하여 정상 모드로 돌아가고 클라이언트의 모든 명령을 잊어 버려야합니다. > 그대로

  1. 서버 -에서 FIFO를 사용> 클라이언트 및 단지 클라이언트 -에 대한 소켓을 추가

    나는 지금까지 소켓을 사용한 적이, 그래서 가장 좋은 방법은 무엇 모르겠어요 서버 통신?

  2. 사용하는 하나의 소켓 서버 -> 클라이언트를 스트리밍> 클라이언트 -에서 서버에 명령을주는 (바이트 형식으로?)

내가 소켓은 "AF_UNIX, SOCK_STREAM"를 사용합니다. # 2가 더 나은 변형입니까? 그리고 close()없이 클라이언트의 연결이 끊어 졌는지 어떻게 알 수 있습니까?

+0

그것은 예를 FTP에 대한 참조, 다른 일을하기 위해 여러 연결을 사용하는 것이 드문 일이 아니에요 0bytes. 그러나 프로토콜이 허용하는 경우 동일한 연결을 사용하여 여러 가지 작업을 수행 할 수도 있습니다. –

답변

0

나 옵션 nr.2 투표하고 대한 가능한 해결책은 :

-1- 생성 소켓 [SOCK_STREAM ...];

2-fork() [소켓 설명자를 상속]; 소켓 기술자를 반환()에서 읽을 때

-father[use to read]; 
-son[use to write]; 

당신은 클라이언트 단선 검출하기 위해 구현할 수

+0

좋아요, 고객도 똑같습니까? 하나의 쓰레드/포크가 데이터를 받고 다른 하나는 결국 명령을 쓰는가? 클라이언트가 적절한 종료없이 종료되는지 확인하는 방법을 알고 있습니까? –

+0

yes 그렇기 때문에 양방향에서 양방향성이 가능하며 read (sock fd에서)가 0 바이트를 반환하면 다른 쪽 끝이 단절되었음을 알 수 있기 때문에 확인할 수 있습니다. –

+0

대단한데, 고맙습니다. –