안녕하세요!!
소켓으로 파일(TEXT 파일) 송수신 하는데
어려움이 있이 도움 요청 드립니다.
해법이 있으면 답글 부탁 드립니다.
=== >> 환경 <<===
1. 현 상 : 서버에서 보낸 자료를 클라이언트에서 모두 수신 하였으나
클라이언트 수신 while 루프를 빠져 나오지 못하고
클라이언트 프로그램이 얼어버림 (무한 루프 돌지는 않음) .
2. 클라이언트 소켓 : VC6++ 의 CDataSocket 으로 수신 구현
3. 서버 소켓 : 델파이 자체 소켓(TServerSocket >> delphi 5 버전)
4. 클라이언트 주요 수신 소스 :
- nReceiveLen : 수신길이 , nTotalLen : 받을 파일 사이즈
- destFile : CFile 객체
do
{
dwRead = m_pView->m_pSoc->Receive(data, 4096);
destFile.Write(data, dwRead);
nReceiveLen += dwRead;
if ((nReceiveLen >= nTotalLen) || (dwRead == 0)){
break; << 이 소스가 실행 되도 LOOP를 못빠져 나와
플그램이 얼어 버림 (loop 도 돌지 않으면서 얼어 버림)
}
} while (dwRead > 0);
5. 서버 전송 소스 :
Try
FileName := 'aaa.txt';
FileStream := TFileStream.Create(FileName,fmOpenRead);
FileStream.Position:=0;
BeSend := Server.Socket.Connections[0].SendStream(FileStream);
sSenddata := FileName + ' 파일 전송 OK';
Finally
Server.Socket.Connections[0].SendText('파일 전송 완료');
// FileStream.Free; << 이부분은 에러가 발생되어 소스 막음
(별문제는 없었음)
end;
주신 말씀은 전송시 CR + LF 를 붙혀서 보내라고 하셨는데 .
아래쪽 소스를 보면
보내는 쪽은 파일 스트림으로 한번에 보내는 구조라
CR +LF 를 붙혀서 보낼수 없을 것 같은데 ..
제가 잘 못 알고 있는 건가요?
그럼 수고 하세요..!!
// ===== 파일 전송 부분소스 ===========//
BeSend := Server.Socket.Connections[0].SendStream(FileStream);
<< 한방에 날려 버림.
// ===== 파일 전송 부분소스 ===========//