구조체 송수신
송신
struct MyStruct
{
int a;
double b;
};
MyStruct c;
send(clientSocket, (char*)&c, sizeof(c) , 0);
- 송신 시 char* 형식으로 변환하여
- 구조체의 처음주소부터
- 데이터가 저장된 마지막까지의 메모리를 보내게 된다.
수신
struct MyStruct
{
int a;
double b;
};
char recvData[255];
recvSize = recv(hSocket, recvData, sizeof(recvData), 0);
if (recvSize == -1)
cout << "recv() Error" << endl;
MyStruct* c = (MyStruct*)recvData;
cout << "recv " << recvSize << " message : " << c->a << " / " << c->b << endl;
- buffer에 해당 메모리 값을 저장한 다음
- (구조체*) 형식으로 변환하여 메모리에 저장된 값을 구조체 형식인 int/double 형식으로 해석하여
- 수신하게 된다.
구조체를 제외한 다른 자료형 또한 위와 같은 방법으로 송수신이 가능하다.
다만 주의해야할 점은 패킷 크기를 초과하지 않도록 주의해야 한다는 점이다.
위의 점을 해결하기 위해 데이터를 그대로 보내는 것이 아니라
커스텀 헤더 데이터를 추가하여 같이 보내게 된다.
헤더엔 보낼 데이터의 크기, 데이터를 수신해서 어떤식으로 해석할지 등의 정보를 같이 보내게 된다.
'C++ > C++' 카테고리의 다른 글
[C++] TCP socket 통신 구현 (0) | 2022.12.19 |
---|---|
[C++] find, find_if 차이점 (0) | 2022.12.07 |
[C++] 멤버함수포인터 소멸자 런타임 에러 (0) | 2022.12.01 |
[C++] 함수포인터, 멤버 함수 포인터 (0) | 2022.11.27 |
[C++] multiset (1) | 2022.11.24 |