;

Winsock 구조체 데이터 보내고 받기 본문

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 );
*/



반응형
Comments