UDP 데이터 전송 함수 설명
network_send_udp_raw
함수는 UDP를 사용하여 서버에 데이터를 전송하는 기능을 제공합니다. 이 함수는 네트워크 소켓 ID, 연결할 URL, 사용할 포트를 인자로 받습니다. 또한 전송할 데이터를 포함하는 버퍼와 데이터의 크기(바이트 단위)를 제공해야 합니다. 함수는 전송된 데이터의 바이트 수를 반환하며, 전송이 실패한 경우 0보다 작은 숫자를 반환합니다.
전송된 데이터는 GameMaker에 의해 형식화되지 않으며, 수신 장치는 데이터를 스트림으로 받게 됩니다. 따라서 수신 측에서 데이터를 처리해야 합니다. UDP는 "연결 없는" 방식으로, 실제로 연결을 하지 않고 패킷을 IP로 직접 전송합니다. 서버는 IP 주소에서 들어오는 데이터를 수신하고 이를 "있는 그대로" 처리해야 합니다.
주의: 이 함수는 HTML5 타겟에서 실행되는 프로젝트에서는 작동하지 않으며, HTML5 프로젝트는 UDP를 수신할 수 없습니다.
함수 구문
network_send_udp_raw(socket, url, port, bufferid, size);
인자 설명
인자 | 타입 | 설명 |
---|---|---|
socket | Network Socket ID | 사용할 소켓의 ID |
url | String | 연결할 URL 또는 IP (IPv4 또는 IPv6 가능) |
port | Real | 연결할 포트 |
bufferid | Buffer | 데이터를 가져올 버퍼 |
size | Real | 데이터의 크기 (바이트 단위) |
반환값
- Real: 전송된 데이터의 바이트 수
예제
다음 코드는 URL로 정의된 서버에 포트 6510을 통해 원시 UDP 패킷을 전송합니다. 데이터는 변수 buff
에 있는 버퍼에서 가져옵니다.
network_send_udp_raw(sock, "www.macsweeneygames.com", 6510, buff, buffer_tell(buff));
활용 예제
- 게임 상태 전송: 게임의 현재 상태를 서버에 전송하여 멀티플레이어 게임에서 동기화를 유지할 수 있습니다.
gml var game_state = buffer_create(256, buffer_grow, 1); buffer_write(game_state, buffer_u8, player_id); buffer_write(game_state, buffer_u8, player_score); network_send_udp_raw(sock, "game.server.com", 12345, game_state, buffer_tell(game_state));
- 채팅 메시지 전송: 플레이어가 입력한 채팅 메시지를 서버에 전송합니다.
gml var chat_message = buffer_create(256, buffer_grow, 1); buffer_write(chat_message, buffer_string, player_name); buffer_write(chat_message, buffer_string, message_text); network_send_udp_raw(sock, "chat.server.com", 54321, chat_message, buffer_tell(chat_message));
- 게임 이벤트 알림: 특정 게임 이벤트가 발생했을 때 서버에 알림을 보냅니다.
gml var event_notification = buffer_create(256, buffer_grow, 1); buffer_write(event_notification, buffer_u8, event_type); buffer_write(event_notification, buffer_u8, event_data); network_send_udp_raw(sock, "events.server.com", 67890, event_notification, buffer_tell(event_notification));
이와 같은 방식으로 network_send_udp_raw
함수를 활용하여 다양한 네트워크 통신을 구현할 수 있습니다.