아..
SendBuf 랑은 TWinSocketStream이랑은 좀 차이가 있다고 보여집니다.
SendBuf는 비동기 소켓이지만 TWinSocketStream은 동기 소켓이잖아요
그러니까 당연히 얼마만큼의 데이터를 보내던지 지가 알아서 체크해서
보내야 마땅할터인데...
실제로는 그렇게 안되고.. 분명히 보냈다고 Length를 리턴해주는데,
받은 쪽에서는 60%도 제대로 못 받아서 데이터가 날아가 버리거든요 -_-;;;
그렇다면 Stream이라고 말을 해서는 안되겠죠...
차라리 비동기 소켓이라면 SendBuf 시에 -1 을 리턴해주니까 안가는지 체크는 되지만,
동기 소켓에서 TWinSocketStream으로 갔는지 버퍼에 쌓여있는데 또 보내서 날아가는건지
체크할 방법이 전무하다는 사실 입니다.
이것이 바로 문제였죠 -_-;;;
헤헤. 그럼 ^^
답변 감사합니다.
김성규 님이 쓰신 글 :
: 제 뜻은 그런 뜻이 아니었는데... 설명이 부족했나 봅니다.
:
:
http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdlec&mode=read&num=1585&page=1&backdepth=1
:
: 위 링크에 가보시면.. 관련한 내용이 아주 잘 정리되어 있습니다.
:
: 4000king이라는 화상채팅 솔루션 개발업체 사장님게서 경험담을 정리해 놓으신 거죠.
: 피가되고 살이되는 정보라 생각합니다.
:
: 그중에 이런 내용이 나옵니다.
:
: //---------------------------------------------
: - SendBuf
:
: ㅋㅋㅋㅋㅋㅋㅋㅋ. 못믿을년 SendBuf.
: 난 이것을 주로 사용한다. 못믿을년? 근데 주로 사용?
: 데이터 전송에는 이것만한 것이 없다.
: SendBuf 의 도움말을 잘 보도록 하자.
: 소켓 버퍼에 다른값이 있어서 쓰기가 안될경우 -1 을 리턴한다.
: 물론 전송은 안된다.
: 에잉~ 난 전송해야 하는데..안되면..이거 못쓰쥐....이런 분이라면 아래를 봐라.
:
: While SendBuf()= -1 do begin
: end;
:
: 이러면 확실하게 전송된다.
: 하지만 조심해서 사용해야 한다.
: 일정한 Network Bandwidth 에서 소켓의 사용량이 많을 경우 루프를 계속 돌아버림으
: 로써 CPU 의 오버헤드를 가져온다.
:
: //---------------------------------------------
:
: 하여간, 설명이 부족했나 봅니다. 제가 드리고 싶었던 말은
:
: 만약 보내야 하는데... 이미 소켙버퍼에 아직 안보내진 것이 남아 있다면..
: 보내고 싶어도 못 보내는 것 입니다.
:
: 소켙버퍼에 넣어야 시스템이 보낼텐데.. 더 이상 자리가 없어 넣지를 못하니..
: 버퍼 크기를 무한정 늘이거나 해야할 텐데.. 그러려면 소켙 드라이버를 다시 짜야 되겠죠.
:
: 그래도 문제인 것이 만약 그렇다면 1기가짜리 파일을 보내는 중에 랜선을 뽑아버리면
: 1기가짜리 버퍼가 생기겠죠.
:
: 반대의 경우도 마찬가지 입니다.
:
: SendText로 보내고 ReceiveText로 받을때 한 라인이 다 온다고 생각하지 마시기 바랍니다.
:
: 보낼때는 "볼랜드 포럼"을 한번에 보낼 수도 있을지 모르지만.....
:
: 올때는 "볼랜드 포럼"이 한번에 올 수도 있고..
:
: "볼랜드"
: " 포럼"
:
: 이렇게 두번에 올 수도 있지요.
:
: 그리고 이건 델파이 소켙의 버그가 아닙니다. 모든 상황에서 동일하게 적용되는 사항입니다.
:
: 비주얼 베이직에서도 비주얼 c에서도 마찬가지입니다. 단지 네트웤 프로그래밍시 유의해야할 사항일
: 뿐입니다.
:
: 도움말을 잘 읽으시고, 이러한 처리를 해주어야 하는지 아님 알아서 해주는지 잘 구분하셔서
: 사용하시기 바랍니다.
:
: 도움이 되셨기를...