network_send_raw 함수 설명
network_send_raw
함수는 네트워크를 통해 "원시" 데이터 패킷을 전송하는 기능을 제공합니다. 이 함수는 다음과 같은 인자를 필요로 합니다:
- Network Socket ID: 연결할 소켓의 ID
- Buffer: 전송할 데이터가 포함된 버퍼
- Size: 데이터 패킷의 크기(바이트 단위)
전송되는 데이터는 GameMaker에 의해 형식화되지 않으며, 수신 장치는 데이터를 스트림 형태로 받게 됩니다. 따라서 수신 측에서 데이터를 처리해야 합니다.
함수 사용법
구문
network_send_raw(socket, bufferid, size, [options]);
인자 설명
인자명 | 타입 | 설명 |
---|---|---|
socket | Network Socket ID | 사용할 소켓의 ID |
bufferid | Buffer | 데이터가 포함된 버퍼 |
size | Real | 데이터의 크기(바이트 단위) |
options | Network Send Type Constant | WebSockets에서 텍스트와 이진 데이터 선택에 사용; 지정하지 않으면 기본적으로 이진 데이터가 전송됨 |
반환값
- 전송된 데이터의 바이트 수
- 전송 실패 시 0보다 작은 숫자
옵션 인자
마지막 인자는 선택 사항이며, WebSockets와 함께 사용됩니다. 이 인자를 통해 이진 데이터 또는 텍스트 데이터를 선택할 수 있습니다. 다음 상수를 사용할 수 있습니다:
상수 | 설명 |
---|---|
network_send_binary | 이진 메시지 전송 |
network_send_text | 텍스트 메시지 전송 |
일부 플랫폼의 API는 WebSockets를 사용할 때 텍스트 메시지만 허용하므로, 이 경우 network_send_text
상수를 사용할 수 있습니다. 이 인자가 지정되지 않으면 기본적으로 이진 데이터가 전송됩니다.
예제
다음은 network_send_raw
함수를 사용하는 예제입니다:
buff = buffer_load("player_save.dat");
network_send_raw(sock, buff, buffer_get_size(buff));
위의 코드는 이전에 저장된 데이터를 메모리의 버퍼에 로드하고, 이 버퍼를 buff
변수에 저장합니다. 그런 다음 이 전체 버퍼를 원시 데이터 패킷으로 네트워크를 통해 전송합니다. 이때 사용되는 소켓은 sock
변수로 식별됩니다.
활용 예제
- 게임 상태 전송
gml // 게임 상태를 버퍼에 저장하고 전송 var game_state = buffer_create(256, buffer_grow, 1); buffer_write(game_state, buffer_u8, player_health); network_send_raw(sock, game_state, buffer_get_size(game_state));
- 채팅 메시지 전송
gml // 사용자 입력을 버퍼에 저장하고 전송 var chat_message = buffer_create(string_length(user_input) + 1, buffer_grow, 1); buffer_write(chat_message, buffer_string, user_input); network_send_raw(sock, chat_message, buffer_get_size(chat_message), network_send_text);
- 파일 전송
gml // 파일 내용을 버퍼에 로드하고 전송 var file_buffer = buffer_load("file_to_send.dat"); network_send_raw(sock, file_buffer, buffer_get_size(file_buffer));
- 게임 오브젝트 데이터 전송
gml // 게임 오브젝트의 위치와 상태를 전송 var object_data = buffer_create(12, buffer_grow, 1); buffer_write(object_data, buffer_f32, x); buffer_write(object_data, buffer_f32, y); network_send_raw(sock, object_data, buffer_get_size(object_data));
이와 같이 network_send_raw
함수를 활용하여 다양한 데이터 전송을 구현할 수 있습니다.