C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36835] Re:소켓통신중(TServerSocket, TClientSocket) TStringList 객체 와 같은 데이터도 보낼수 있나요?
임문환.실업자 [origin] 1177 읽음    2004-08-18 13:57
혀비.오기 님이 쓰신 글 :
: 소켓 통신 프로그램을 작성중
: 서버에서 클라이언트로 정보를 전달해야 하는데
: 일반 텍스트보다는 TStringList를 전달 하는게 좋을거 같은데
: 방법이 있나요?
: 참고로 TServerSocket은 stThreadBlocking모드이고
: TWinSocketStream *pStream;
:
: pStream->Write(void *, int)를 이용합니다.
: 방법이 있으면 어떻게 하면 되는지요
:
: 서버
: TStringList *pStringList = new TStringList();
: // pStringList에 정보를 넣고
: ...
: pStream->Write(pStringList, sizeof(pStringList)) 로 보내고
: 클라
: TStringList *pStringList = new TStringList();
:
: Socket->RecieveBuf(pStringList, RecieveSize);
: 로 받으니 pStringList->Strings[0]은 잘못된 메모리를 참조하는 에러가 나네요.

TStringList는 TStrings를 상속받았으며 이에는 아래의 두 메소드가 있습니다.
virtual void __fastcall SaveToStream(TStream* Stream);
virtual void __fastcall LoadFromStream(TStream* Stream);

한편, TWinSocketStream의 조상 중에는 TStream이 있습니다.
따라서, 아래와 같이 할 수 있습니다.
보내는쪽: pStringList->SaveToStream(pStream);
받는쪽: pStringList->LoadFromStream(pStream);
이렇게 하려면 사전에 양단간에 약속이 되어 있어야 겠습니다(해당 프로그램에 맞는 프로토콜 작성 필요).
현재 내가 받는 것이 TStrings라는 것을 알아야 이렇게 해도 오류가 발생하지 않는 것이니까요.
프로토콜들을 보면 보통 메시지 헤더를 만드는 게 일반적입니다.
처음 몇바이트에 현재 보내는 메시지 본문이 어떤 구조를 사용해야 하는 것인지를 지정하고.
각각의 메시지의 끝은 어떤 마크를 사용할 것인지 등을 지정하는 프로토콜.

그리고, 위의 예에서 양단간의 프로그램 개발 언어의 종류나 개발도구가 다르면 매우 곤란해질 수 있습니다.

잘은 모르겠습니다만, CORBA에 대해 한 번 알아보는 것도 도움이 될것입니다.

+ -

관련 글 리스트
36829 소켓통신중(TServerSocket, TClientSocket) TStringList 객체 와 같은 데이터도 보낼수 있나요? 혀비.오기 897 2004/08/18
36835     Re:소켓통신중(TServerSocket, TClientSocket) TStringList 객체 와 같은 데이터도 보낼수 있나요? 임문환.실업자 1177 2004/08/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.