클라이언트와 서버가 구조체를 정확히 같은 방법으로 배치 한 경우 필드가 모두 동일한 크기이고 동일한 패딩을 사용할 수 있습니다. 예를 들어 구조체에 long
이있는 경우 한 컴퓨터에서는 32 비트이고 다른 컴퓨터에서는 64 비트 일 수 있습니다.이 경우 구조체가 제대로 수신되지 않습니다.
클라이언트와 서버가 항상 매우 유사한 C 구현에있을 경우 (예 : 일부 기본 개념을 배우는 데 사용하는 코드 일 수도 있고 다른 이유로 알고있는 경우) 귀하의 코드는 OSX의 현재 버전에서만 실행되어야합니다), 그러면 아마 그걸로 도망 갈 수있을 것입니다. 코드가 다른 플랫폼에서 제대로 작동하지 않을 것이고 실제 상황에서 사용하기 전에해야 할 일이 많다는 것을 기억하십시오.
대부분의 클라이언트 - 서버 응용 프로그램의 경우 일반적으로 대답 할 수 없다는 것을 의미합니다. 실제로 수행하는 작업은 전송 된 바이트 수, 순서, 의미 등을 기준으로 메시지를 정의하는 것입니다. 그런 다음 각 끝에서 사용중인 구조체가 꼭 필요한 레이아웃을 갖출 수 있도록 플랫폼에 특정한 작업을 수행합니다. 그렇다고하더라도 리틀 엔디안 구조체의 정수 멤버를 보내는 경우 바이트 스와핑을 수행해야하며 빅 엔디 언 (big-endian) 머신에서 코드를 실행해야합니다. XML, json 및 Google의 프로토콜 버퍼와 같은 데이터 교환 형식이 존재하기 때문에 이러한 까다로운 작업을 수행 할 필요가 없습니다.
[편집 : 물론 일부 구조체 멤버는 절대로 전선을 통해 보낼 수 없다는 것을 기억하십시오. 예를 들어 구조체에 포인터가 있으면 포인터가 송신기의 메모리를 참조하며 수신 측에서 쓸모가 없습니다. 이 사실이 이미 자명 한 경우 사과드립니다.하지만 C로 시작하면 누구에게나 분명하지 않습니다.
유익한 답변을 보내 주신 모든 분들께 감사드립니다. – o01