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
[18959] Re:원래 패킷방식으로 전송할 때는 #pragma pack을 쓰는게 정석입니다.
김상구.패패루 [peperu] 1432 읽음    2002-05-28 15:43
원래 패킷 방식으로 전송할 때는 스트럭처를 통째로 날리는 경우죠.
이런 경우에는 아래 질문 나왔던 것 처럼

#pragma pack(1)
struct....{
...
};
#pragma pack()

이렇게 쓰시고, 전송할 때는 sizeof()로 크기를 측정하면 안전하게 보낼 수 있습니다.

문자열을 전송할 때는 C++빌더에서는 malloc이나 new 이런거 신경 안쓰셔도 별로 지장
없습니다. 대부분의 컴포넌트는 아예 SendString같은 함수가 준비되어 있죠.

String sTest = "어쩌구저쩌구 문자열 길다...";
// 해당소켓컴포넌트의Send메소드..대부분 비슷하죠, void*, size를 받죠
Send(sTest.c_str(), sTest.Length());

이렇게 보내시면 됩니다. 물론 비동기로 작업할 때는 얘기가 좀 달라지지만요. ^^

아무튼 %4 이런 연산을 쓰시는건 별로 좋은 발상이 아닙니다.
소켓쪽은 보통 성능이 요구되는 경우가 많기 때문에 불필요한 %연산(이거 생각보다
비싼 연산입니다)을 쓸 이유도 없고, 게다가 4라는 크기는 WORD의 사이즈인데 64bit
컴퓨터가 낼모레인 이 시점에 그렇게 적으시는건 별로 안좋아보이네요.

질문하실때 블럭/넌블럭 구분을 안하셔서 제가 잘 못 생각하고 엉뚱한 방향으로 답변을
드렸었군요. 지송함다



육성수 님이 쓰신 글 :
: 음..하여간..답변은 감사합니다.
:
: 하여간..많은 도움이 되었습니다.
:
: 다른 분들을 위해..이 글을 읽어 주시는 ....
:
: 일단 보낼때..받을때..
:
: 어떤 쪽에서 설정을 하시던..
:
: 보낼곳에서..설정을 하신다면..
:
: 컴파일 옵션에 보면..컴파일 단위라고 하죠..(정확한 용어는 모르겟당..)
:
: 그것이 얼마로 되어 있냐를 보심 됩니다.
:
: 만약..4바이트(기본값이죠)로 되어 있다면..보낼때도..보낼 양을 4바이트 단위로 맞추어서 보내심
: 됩니다.
: (남는 부분은..당근..NULL이겠죠^^)
:
: 즉..(보낼 데이타) % 4 = 0 이라는 값이 나옴 되겠죠..받는곳도..맞추어 주심 되고요..
:
: 그리고
:
: 만약..받는곳에서..설정을 하신다면..
:
: 저처럼..new연산자를 사용해서..메모리를 힙에 만들지 마시고..new 하고 malloc 하고는 차이가 있데요..^^
:
: malloc을 사용해서 만드심 됩니다. 그리고 strncpy(....) 함수나..memcpy(..)함수 사용하심 되구요..
:
: 하여간..해결을 해서 다행이군요..관심 보여주신 다른 분들에게도  감사의 뜻을 전합니다.
:
: 참고로..저는 스트링 값을 날리는데 테스트 했음다...파일이나..뭐 이런거는 모르겠군요..
:
: 공부하다가 막히면..다시 찾아 오겠읍니다.

+ -

관련 글 리스트
18938 참 이상타...소켓의 receivebuf(....)함수에서 쓰레기가 들어온당.. 육성수 1140 2002/05/28
18949     Re: Non-Blocking인지 Blocking인지 확인하세요. 김상구.패패루 1016 2002/05/28
18954         감사 감사 합니다. 하여간..벌써 해결을 봤네요..이 방법으로 하니깐 되던데..또 제가 놓치는 거라도 있는 육성수 832 2002/05/28
18959             Re:원래 패킷방식으로 전송할 때는 #pragma pack을 쓰는게 정석입니다. 김상구.패패루 1432 2002/05/28
18966                 저의 실수..코딩하다..빼먹고..코딩했습니다.. 육성수 803 2002/05/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.