C, C++, C#
Winsock 구조체 데이터 보내고 받기
WindowsHyun
2016. 12. 1. 03:49
반응형
1. 우선 자신이 원하는 구조체를 만들고, 구조체를 선언 한다.
typedef struct Player_Socket { float x, y, z; float camxrotate, camyrotate; bool live; bool team; char nickName[16]; int character_down_state; }Player_Socket; Player_Socket player;
2. 구조체를 보내는 방법 ( 고정+가변 길이 )
- 먼저 데이터의 크기를 보낸후, 실제 구조체를 보낸다.
int retval; // 데이터 보내기( 구조체 크기를 먼저 보낸다. ) int len = sizeof( player ); retval = send( sock, (char *)&len, sizeof( int ), 0 ); if ( retval == SOCKET_ERROR ) { err_display( "send()" ); exit( 1 ); } // 데이터 보내기( 구조체 데이터를 보낸다. ) retval = send( sock, (char*)&player, sizeof( Player_Socket ), 0 ); if ( retval == SOCKET_ERROR ) { err_display( "send()" ); exit( 1 ); }
3.구조체를 받는 방법 ( 고정 + 가변 길이 )
- 함수로 제작을 하여 sock를 받아와 서버에서 전송된 구조체를
Player_Socket recv_Player( SOCKET sock ) { int retval; int len; retval = recvn( sock, (char *)&len, sizeof( int ), 0 ); // 데이터 받기(고정 길이) if ( retval == SOCKET_ERROR ) { err_display( "recv()" ); } int GetSize; char suBuffer[BUFSIZE]; Player_Socket *player; GetSize = recv( sock, suBuffer, len, 0 ); if ( GetSize == SOCKET_ERROR ) { exit( 1 ); } suBuffer[GetSize] = '\0'; player = (Player_Socket*)suBuffer; return *player; } /* 새로운 구조체 : server_data 함수 : recv_Player 소켓 : sock server_data = recv_Player( sock ); */
반응형