UDP 데이터 전송 함수 설명
network_send_udp
함수는 UDP를 사용하여 서버에 데이터를 전송하는 기능을 제공합니다. 이 함수는 연결할 네트워크 소켓 ID, 연결할 URL, 사용할 포트를 인자로 받습니다. 또한 전송할 데이터를 포함하는 버퍼와 데이터의 크기(바이트 단위)를 제공해야 합니다. 이 함수는 전송된 데이터의 바이트 수를 반환하며, 전송 실패 시 0보다 작은 숫자를 반환합니다. 전송된 데이터의 최종 크기는 GameMaker 헤더 정보(추가 12 바이트)를 포함합니다.
UDP는 "연결 없는" 방식으로, 실제로 연결을 하지 않고 패킷을 직접 IP로 전송합니다. 서버는 IP 주소에서 들어오는 데이터를 수신하고 이를 "있는 그대로" 처리해야 합니다. 이 함수는 HTML5 타겟에서 실행되는 프로젝트에서는 작동하지 않으며, HTML5 프로젝트는 UDP를 수신할 수 없습니다.
함수 구문
network_send_udp(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(sock, "www.macsweeneygames.com", 6510, buff, buffer_tell(buff));
활용 예제
- 간단한 메시지 전송
gml var message = buffer_create(256, buffer_grow, 1); buffer_write(message, buffer_string, "Hello, Server!"); network_send_udp(sock, "example.com", 1234, message, buffer_tell(message)); buffer_delete(message);
- 게임 상태 전송
gml var game_state = buffer_create(128, buffer_grow, 1); buffer_write(game_state, buffer_real, player_x); buffer_write(game_state, buffer_real, player_y); network_send_udp(sock, "game.server.com", 5678, game_state, buffer_tell(game_state)); buffer_delete(game_state);
- 다양한 데이터 전송
gml var data_buffer = buffer_create(512, buffer_grow, 1); buffer_write(data_buffer, buffer_string, "Player Score"); buffer_write(data_buffer, buffer_real, player_score); network_send_udp(sock, "data.server.com", 9100, data_buffer, buffer_tell(data_buffer)); buffer_delete(data_buffer);
- 에러 처리 추가
gml var result = network_send_udp(sock, "error.server.com", 8080, buff, buffer_tell(buff)); if (result < 0) { show_error("전송 실패: " + string(result), true); }
이와 같이 network_send_udp
함수를 활용하여 다양한 데이터 전송 작업을 수행할 수 있습니다.