|
원래 패킷 방식으로 전송할 때는 스트럭처를 통째로 날리는 경우죠.
이런 경우에는 아래 질문 나왔던 것 처럼
#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(..)함수 사용하심 되구요..
:
: 하여간..해결을 해서 다행이군요..관심 보여주신 다른 분들에게도 감사의 뜻을 전합니다.
:
: 참고로..저는 스트링 값을 날리는데 테스트 했음다...파일이나..뭐 이런거는 모르겠군요..
:
: 공부하다가 막히면..다시 찾아 오겠읍니다.
|