|
안녕하세요 utime입니다.
꼭 MemoryStream은 아니지만 뭐 비슷하게 급조했습니다.
.....\CBuilder6\Examples\Internet\Chat 에 있는 예제 코드를 조금 바꿨는데요~
보내는 부분은
걍 폼에다가 Send 버튼 하나 만들고 이벤트 내용은
void __fastcall TChatForm::btnSendClick(TObject *Sender)
{
TOpenDialog *op;
TFileStream *ms;
char *Buf;
AnsiString sName;
op = new TOpenDialog(this);
if( !op->Execute() )
{
delete op;
op = NULL;
return;
}
sName = op->FileName;
delete op;
op = NULL;
if( !FileExists( sName ) ) return;
ms = new TFileStream(sName, fmOpenRead);
Buf = new char[ms->Size];
::memset( Buf, 0x00, ms->Size );
ms->Read(Buf, ms->Size);
ServerSocket->Socket->Connections[0]->SendBuf(Buf, ms->Size);
delete [] Buf;
Buf = NULL;
delete ms;
ms = NULL;
}
//---------------------------------------------------------------------------
이렇구요
받는 부분은
void __fastcall TChatForm::ClientSocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
//Memo2->Lines->Add(Socket->ReceiveText());
int s = Socket->ReceiveLength();
char *p = new char[s];
::memset( p, 0x00, s);
Socket->ReceiveBuf(p, s);
TFileStream *fs = new TFileStream("c:\\test.bin", fmCreate);
fs->Write(p, s);
delete [] p;
p = NULL;
delete fs;
fs = NULL;
}
//---------------------------------------------------------------------------
이렇게 했습니다.
뭐 궂이 이미지 파일이 아녀도 상관 없겠지요.
걍 테스트 용도로 했으니 반드시 참고만 하시기 바랍니다.
큰 사이즈의 파일을 보내실 때는 적당 버퍼을 잡으신 후 짤라서 보내세요~
물론 받을 때도 계속 쌓아놓고 있어야 할 테고...
왠만하면 프로토콜 정의해서 보내시는 것이 괜찮죠~ 아니면 indy쓰면 괜찮을 것 같은데... 아직 그건 안써봐서요 헤헷
MemoryStream 이나 FileStream이나 다 같은 부모 자식이기 때문에 이해 하는데 괜찮겠지요?
즐푸하세요~ ^^
아~ 왜이리 일하기 싫은지~ ㅠㅠ;;;
이성제 님이 쓰신 글 :
: TMemoryStream *ms = new TMemoryStream;
: this->Image1->Picture->Graphic->SaveToStream(ms);
: 이게 Image를 MemoryStream으로 받은거잖아요
:
: 그다음에 Socket에 TMemoryStream으로 연동 해야 하는데 ㅠ 하는 방법좀 가르쳐 주세요 ㅠ
|