2014-12-09 2 views
0

내가 원하는 것은 안정적인 속도 (예 : 600KB/s)로 소켓을 통해 데이터를 출력하는 것입니다. TCP에는 고유 한 흐름 제어가 있기 때문에 UDP를 선택합니다.UDP 소켓의 처리량을 제어하는 ​​방법은 무엇입니까?

여기에 질문이 있습니다. 어떻게 이것을 달성 할 수 있습니까? 분당 600KB 크기의 패킷 하나만 보낼 수 있습니까? 그리고 두 패킷 사이의 시간 간격을 제어하는 ​​방법? 난 그냥 select()와 시간 간격을 설정할 수 있습니다

select(fd, NULL, NULL, NULL, &tv); //tv is set as 1 second 

내가 의심, 그 소켓의 sendto() 응용 프로그램 계층에서 실행되고 있으며 우리는 패킷이 OS 커널에 의해 전송 된 것을 확인 할 수 있기 때문이다.

해결 방법? 아니면 더 좋은 방법이 있습니까?

PS : C 언어

+1

제안 된 600KB 메시지는 OS에 의해 600 패킷 이상으로 나뉩니다. 또한 "흐름 제어"에 의해 "속도"를 의미하는 경우 TCP에 흐름 제어가 없습니다 ... TCP 보장 1) 패킷 내용의 오류 검사 2) 패킷이 올바른 순서로 피어에 전달됩니다 3) 손실 된 패킷의 재전송 . 당신은 UDP로 이것들을 얻지 못합니다. 이러한 문제가 중요한 경우 TCP를 사용하거나 애플리케이션에 빌드해야합니다 (예 : 바퀴 재발 명). – TonyB

답변

0

가장 간단한 방법은 아래로 총 처리량을 유지하기에 충분히 긴 전송 사이에 단지 기다리는 것입니다. 이렇게하면 '평균'전송률을 원하는 값으로 낮출 수 있습니다.

그러나 훨씬 나은 구현은 수신자가 입력을받은 후 ACK를 보내는 것입니다. 이로써 최고의 속도로 페이싱이 가능합니다. 물론, 시간 초과 및 재송신 등이 필요합니다.

관련 문제