最近,我开始玩Game Maker来制作一款非常简单的游戏,具有在线游戏(多人游戏)的能力。我做了一个非常简单的客户端&服务器。我可以将数据从服务器发送到客户端,但我无法将数据从客户端发送到服务器。
客户:(创建活动)
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!
仅在客户端连接或断开连接时出现,而不是在发送数据时出现。使用几乎完全相同的代码,我可以从服务器发送,但反之亦然。这是代码问题还是服务器/客户端限制?
答案 0 :(得分:1)
这是服务器端代码:
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。 <{1}}永远不会被触发。
此外,您必须使用负数(如noone(-4))在服务器的create事件中声明network_type_data
变量。