[질문] 소켓프로그래밍(윈도우 vs 리눅스)
글쓴이: erenes / 작성시간: 화, 2003/03/25 - 9:29오전
안녕하세요.
윈도우와 리눅스 간에 소켓연결을 통해 데이터를 주고받도록
하려고 합니다. 간단하게 다음과 같이 구조체를 만들어서
주고 받았습니다.
struct data
{
char a;
int b;
long c;
float d;
double e;
};
윈도우에서 이 구조체에 데이터를 담아 리눅스로 보내서 printf로 찍어봤습니다.
그런데 char, int, long, float 는 제대로 같은 값이 찍혔는데 double은
이상하게 찍히더군요. 제대로 된 값이 안나온다는 거죠. 무엇이 문제인지
가르쳐 주세요.
수고하세요.
Forums:
몇가지 확인해보세여
일단 CPU가 같은지 확인해보세요..
CPU에 따라서 빅인디언, 리틀인디안으로 갈라져서...
data 구조가 string형이 아닌 경우에 깨질 수 있습니다.
그리고 리눅스의 데이터 타입이 int형은 4바이트 먹쥐여..
형에 대해서 바이트 수 체크를 함 해보시길..
코딩을 잘못하시듯한데요..
우선 int, long, float가 제대로 받아진다면 바이트오더 문제는 아닌듯 합니다.
소스코드 어딘가가 문제가 있는게 아닐런지...
가끔은 밥을 굶어도 살 수 있다.
컴파일 옵션에서요...
윈도우에서요...
/Zp1 이라는 컴파일 옵션을 주고 컴파일 해보세요.
1byte씩 경계로 구조체를 생성하기위한 옵션입니다.
... 구조체 단위로 윈도우에서 리눅스로 데이터를 전송할 때
위의 옵션을 주어야지 제대로 동작하더라구요.
< ACK and you shall receive. >
글쎄요.. byte padding이 생겨서, structure 자체가
글쎄요.. byte padding이 생겨서, structure 자체가 깨진것일 수 있겠네요.
sizeof(type) 비교해보시는게 좋을 것 같습니다.
전에 기억에는 리눅스쪽에서 1byte가 더 붙어서 문제가 있었던 것으로..
댓글 달기