유닉스 소켓 프로그래밍중입니다.
struct -
{
int a;
char* b;
int c;
};
이런식으로 작성하여 send하였는데,
int recv(int sockfd, void *buf, int len, unsigned int flags);로 받아서
buf를 struct -형으로 캐스팅후 값을 찍어보니 b,c 는 0이고 a에만 이상한 숫자가 들어 있네요.
어찌된건지 ㅜㅜ 방법이 틀렸나요?
우선 recv 에서 전부 받아졌나요?(recv 리턴값)
그리고 보내실 때 그냥 structure 만 넘기시면 안 됩니다.
char* 부터가 포인터인데 그냥 넘어가지 않죠,
각 데이터 사이즈, endian 등 고려할게 많습니다.
일정 형식을 맞추시고 주고 받으세요. 예를 들어 보낼때
우선 recv 에서 전부
우선 recv 에서 전부 받아졌나요?(recv 리턴값)
그리고 보내실 때 그냥 structure 만 넘기시면 안 됩니다.
char* 부터가 포인터인데 그냥 넘어가지 않죠,
각 데이터 사이즈, endian 등 고려할게 많습니다.
일정 형식을 맞추시고 주고 받으세요. 예를 들어 보낼때
매직넘버(1바이트) + 전체크기(4바이트) + 정수(4바이트)
+ 문자열 길이(4바이트) + 문자열 + 정수(4바이트)
이런 식으로 구체적으로 정해서 데이터를 만들어서 보내시고
받을 때는 다 받으시고 받은 데이터에서 정수, 문자열, 정수를
잘라내서 structure 로 되살리세요.
align 을 확인해보기 바랍니다.
위의 코드와 동일한 스트럭쳐를 사용하셨다면 별 문제가 없어보입니다만
혹시 스트럭져 안에 서로 다른 형의 변수들이 섞여서 사용이 되었다면
스트럭쳐를 선언하실 때 다음과 같이 선언하신 후 테스트해보시기 바랍니다.
그리고 스트럭쳐의 사이즈와, 송신한 사이즈, 수신한 사이즈를 정확히 확인해보시기 바랍니다.
댓글 달기