1

最近、オンライン (マルチプレイヤー) 機能を備えた非常にシンプルなゲームを作成するために、ゲーム メーカーをいじり始めました。非常に単純なクライアントとサーバーを作成しました。サーバーからクライアントにデータを送信できますが、クライアントからサーバーにデータを送信できません。

クライアント: (イベントを作成)

client_socket = network_create_socket(network_socket_tcp);
var server = network_connect(client_socket, "127.0.0.1", 5200);
if(server < 0) show_message("Could not connect! Try turning on the server?");
else{ //Send string
    var t_buffer = buffer_create(256, buffer_grow, 1);
    buffer_seek(t_buffer, buffer_seek_start, 0);
    buffer_write(t_buffer , buffer_string, "Hello");
    network_send_packet(client_socket, t_buffer, buffer_tell(t_buffer));
    buffer_delete(t_buffer);
}

サーバー: (イベントの作成)

server_socket = network_create_server(network_socket_tcp, 5200, 5);

(非同期ネットワーク イベント)

var n_id = ds_map_find_value(async_load, "id");
if(n_id == server_socket){
    var t = ds_map_find_value(async_load, "type");
    socketlist = ds_list_create();
    if(t == network_type_connect){
        var sock = ds_map_find_value(async_load, "socket");
        ds_list_add(socketlist, sock);
    }
    if(t == network_type_data){
        var t_buffer = ds_map_find_value(async_load, "buffer"); 
        var cmd_type = buffer_read(t_buffer, buffer_string);
        show_message(cmd_type);
    }
    //show_message("Something happened!");
}

何らかの理由で、クライアントがデータを送信するときに、サーバーの非同期ネットワーク イベントがトリガーされません。メッセージSomething happened!は、クライアントが接続または切断したときにのみ表示されますが、データが送信されたときは表示されません。ほぼ同じコードを使用して、サーバーから送信できますが、その逆はできません。これはコードの問題ですか、それとも単にサーバー/クライアントの制限ですか?

4

1 に答える 1

2

これはサーバー側のコードです:

var n_id = ds_map_find_value(async_load, "id");
if(n_id == server_socket){
    var t = ds_map_find_value(async_load, "type");
    socketlist = ds_list_create();
    if(t == network_type_connect){
        sock = ds_map_find_value(async_load, "socket");
        ds_list_add(socketlist, sock);
    }
}

if(n_id == sock) {
    var t_buffer = ds_map_find_value(async_load, "buffer"); 
    var cmd_type = buffer_read(t_buffer, buffer_string);
    show_message(cmd_type);
}

メッセージが到着するときは、ソケット ID を使用する必要があります。network_type_dataがトリガーされることはありません。

また、sockサーバーの作成イベントで変数を負の数 (noone (-4) など) で宣言する必要があります。

于 2014-07-03T12:29:35.707 に答える