소켓 프로그램 할 시, loop 안에 있는 send 에 대해서
글쓴이: silzon / 작성시간: 월, 2009/09/28 - 5:47오후
안녕하세요.
근, 이틀동안 여러 싸이트를 검색 하다가, 도저히 안되서 KLDP 의 도움을 받고자 합니다. ㅠㅠ;
720*480* 1 Byte 의 영상을 소켓 프로그램을 이용해서 클라이언트쪽에 보낼려고 합니다.
다음과 같이 전송을 하면, 송/수신이 잘 됩니다.
int i;
for (i = 0; i < 48; i++)
{
send(720 * 1 * 1 Byte 전송)
sleep(1);
}
하지만, 아래와 같이 전송을 하면, Send Error 가 발생 합니다. ㅠㅠ
int i;
for (i = 0; i < 48; i++)
{
send(720 * 1 * 1 Byte 전송)
}
여러분들은 소켓 프로그램을 이용하여, 대용량의 데이터 (영상) 을 전송할 때 어떤 방식으로 하시나요?
저는 송신 버퍼 사이즈 때문에, 저렇게 쪼개서 보낼려고 하는데...
너무 빨리 send 를 해서 그런지, Error 가 발생 하는것 같습니다.
Forums:
...
일단 어떤 에러가 발생하는지를 말해주셔야...... -.-;;;
그리고 버퍼사이즈 같은 건 커널에서 알아서 관리하므로 마지막 1%의 성능을 쥐어짤 게 아니면 신경쓰지 않으시는 게 좋습니다. 메모리가 연속으로 구성되어 있다면 720*480을 한번에 보내는 게 480번 보내는 것보다 아마도 성능이 훨씬 좋을 듯합니다.
(...하지만 저는 소켓 프로그램에 별 경험이 없으므로 다음 분이 확인해주실 겁니다... 후다다닥...)
어떤 에러신지 말씀을 안하셨지만 아마도
소켓버퍼가 풀나서 에러가 나겠지요. loop을 돌면서 아무짓도 안하고 send하면 날 수 밖에 없습니다.
예외 처리를 해주셔야 하고 아마 원활한 전송을 위해서는 그것만으론 부족할 겁니다.
영상전송을 스트리밍으로 하신다면 스트리밍 관련 프로토콜들이 여러가지가 있을 테니
스펙대로 구현을 하시던지 프로토콜 스택을 구입을 하시던지 해야 할 것 같네요.
어찌됬건 요략 드리자면,
1. 예외처리
2. 프로토콜 구입 / 구현(구현시에는 flow control도 포함되어야 할 것 같네요)
그럼 즐거운 하루 되세요. 이만...
return value를 꼭
return value를 꼭 체크하세요.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
영상 전송을 할
영상 전송을 할 때는..
TCP보다는 UDP로 보내는 것이 실시간 전송으로는 좋을 듯 한데요 =.=
RTP/RTCP 같은것도 알아보심이...
아 ^^ 해결 했습니다.
댓글 다신 분들 도움으로 결국 해결 했습니다. ㅋㅋ
다들 감사합니다.~
댓글 달기