윈도우(클라이언트) 와 유닉스(BSD, Linux)간의 TCP/IP를 이용한
글쓴이: luscent / 작성시간: 월, 2004/05/17 - 4:09오후
안녕하세요..
검색해보란 얘기를 많이 들어서 일단 검색은 해보았습니다.
유닉스와 윈도우간의 소켓을 이용한 통신..
그런데.. 제가 네트웍 플밍을 첨 해보는터라. 사실 많이 부족합니다.
다름이 아니라. 윈도우 클라이언트에서 만든 구조체 데이터를
유닉스 서버에서 받아 처리가 가능합니까? 다른 컴파일러이고..
다른 OS를 가진 체제에서 만들어진 프로그램상의 데이터는
상호 교환이 가능한지를 알고 싶습니다.
많은 고견 부탁드립니다.
Forums:
결론부터 말씀드리자면,No problem.약간 주의해야 하
결론부터 말씀드리자면,
No problem.
약간 주의해야 하는 것이 있지만 처음부터 통신에 사용할 구조체를 컴파일러의 옵션에 따라서 잘 설정하시면 대부분 문제 없습니다.
그리고, 서로간의 바이트 순서가 다른 CPU를 사용한다면 구조체를 직접 밀어넣는 그런 방식은 받는 쪽 (or/and) 보내는 쪽에서 순서 뒤집기 처리가 필요합니다.
있을 _수_도 있겠지만, bugiii 님 말씀대로 compiler의 옵션
있을 _수_도 있겠지만, bugiii 님 말씀대로 compiler의 옵션으로 잘 처리하면 되겠지요.
정 불안하시면 serialize를 하시길..
I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?
제가 알기로는...
제가 알기로는 MS의 C 컴파일러는 디폴트로 구조체를 packed로 만든다고 합니다. 즉 dword align이 안맞는 변수도 그냥 다 붙이는 방식이구요,
GNU C 컴파일러는 디폴트로 packed가 아닌, 즉 dword align이 안맞으면 이 사이에 공백을 넣어준다고 합니다. 따라서 둘다 packed가 되게 하던, 둘다 packed가 안되게 하던, 아니면 아예 mis-align이 안되게 구조체를 만들어야 하지요.
제가 해본 것은 packed로 만들어서 하는 경우를 보았는데 이렇게 해주는 컴파일러 옵션을 찾지를 못해서 소스에서 직접 packed 지정을 주었었습니다.
(구조체 선언할 때 지정하는데 기억이 잘 안나네요... :wink: )
하지만 endian이 달라버리면 구조체를 두벌로 만들어야 할지도 모르죠.
지나가다...
디폴트가 아닙니다.
VC++에서는 아래와 같이 해줘야 pack됩니다.
#pragma pack(1)
Re: 지나가다...
default 가 아마도 8인가 4로 되어있는걸로 압니다. 고운 하루되시길...
단지 Padding 하는 방법은 gcc와 vc가 조금 틀린걸로 들은것 같다는
=========================
CharSyam ^^ --- 고운 하루
=========================
정확하게는..XDR을 따릅니다.
XDR (External Data Representation)표준 규약을 따르면 됩니다.
이기종간에 바이너리 데이터를 주고 받을때는 이것만 따라주면 됩니다. XDR에 따라서 기준이 되는 align이 결정되는 것이지, 꼭 8, 4 바이트로 결정되어있는것은 아닙니다.
RFC 1014, XDR: External Data Representation Standard : http://www.faqs.org/rfcs/rfc1014.html
This RFC defined the encoding of data which was XDR at the time this module was originally written. It has apparently been obsoleted by RFC 1832.
RFC 1832, XDR: External Data Representation Standard : http://www.faqs.org/rfcs/rfc1832.html
Newer RFC that provides a revised definition of XDR.
========================================
* The truth will set you free.
댓글 달기