네트워크 패킷 전송 함수 설명
network_send_packet
함수는 네트워크를 통해 데이터 "패킷"을 전송하는 기능을 제공합니다. 이 함수는 연결할 네트워크 소켓 ID와 전송할 데이터를 포함하는 버퍼를 입력받습니다. 또한 데이터 패킷의 크기(바이트 단위)도 함께 제공해야 합니다.
이 함수로 전송된 패킷은 수신하는 게임이 패킷을 올바르게 "분할"할 수 있도록 형식이 지정되어 있습니다. 함수는 전송된 데이터의 바이트 수를 반환하며, 전송에 실패한 경우에는 0보다 작은 숫자를 반환합니다. 반환되는 데이터의 최종 크기는 GameMaker 헤더 정보(추가 12 바이트)를 포함합니다.
함수 구문
network_send_packet(socket, bufferid, size);
인수 설명
인수 | 타입 | 설명 |
---|---|---|
socket | Network Socket ID | 사용할 소켓의 ID |
bufferid | Buffer | 데이터가 포함된 버퍼 |
size | Real | 데이터의 크기(바이트 단위) |
반환값
- Real: 전송된 데이터의 크기 또는 전송 실패 시 0보다 작은 숫자
활용 예제
다음은 이전에 저장된 데이터를 메모리의 버퍼에 로드하고, 새로 생성된 버퍼를 변수 buff
에 저장한 후, 이 버퍼를 네트워크를 통해 전송하는 코드입니다.
buff = buffer_load("player_save.dat");
network_send_packet(sock, buff, buffer_get_size(buff));
위 코드는 player_save.dat
파일에서 데이터를 로드하여 버퍼에 저장하고, 해당 버퍼를 sock
으로 식별되는 소켓을 통해 패킷으로 전송합니다.
추가 활용 예제
- 다양한 데이터 전송: 여러 종류의 데이터를 전송하기 위해 여러 개의 버퍼를 사용할 수 있습니다.
gml buff1 = buffer_create(256, buffer_grow, 1); buffer_write(buff1, buffer_u8, 100); network_send_packet(sock, buff1, buffer_get_size(buff1));
- 에러 처리: 전송이 실패했을 때 에러를 처리하는 방법.
gml var result = network_send_packet(sock, buff, buffer_get_size(buff)); if (result < 0) { show_error("전송 실패!", true); }
- 다양한 소켓 사용: 여러 소켓을 통해 데이터를 전송하는 예제.
gml for (var i = 0; i < socket_count; i++) { network_send_packet(sockets[i], buff, buffer_get_size(buff)); }
- 비동기 전송: 비동기적으로 데이터를 전송하는 방법.
gml async_send_packet(sock, buff);
이와 같은 다양한 활용 예제를 통해 network_send_packet
함수를 효과적으로 사용할 수 있습니다.