求适配Python Websocket服务器的最简GDScript客户端代码及教程
问题解答
最简GDScript TCP回声客户端代码
首先注意:你提供的Python代码是TCP流式套接字服务端,并非WebSocket服务端,因此Godot客户端需要用StreamPeerTCP实现,而非WebSocket相关节点。以下是最简实现:
场景结构
创建一个场景,根节点用Node,添加以下子节点:
LineEdit(命名为LineEdit,用于输入消息)Button(命名为SendButton,文本改为"发送")Label(命名为ResponseLabel,用于显示服务器返回内容)
GDScript代码(挂在根Node上)
extends Node var tcp_client: StreamPeerTCP = StreamPeerTCP.new() const HOST: String = "127.0.0.1" const PORT: int = 65432 func _ready() -> void: # 连接服务器 var connect_error = tcp_client.connect_to_host(HOST, PORT) if connect_error != OK: print(f"连接失败: 错误码 {connect_error}") else: print("成功连接到服务器") # 启动监听线程(避免阻塞主线程) call_deferred("_start_server_listener") # 持续监听服务器返回消息 func _start_server_listener() -> void: while tcp_client.is_connected(): if tcp_client.get_available_bytes() > 0: # 读取所有可用字节并转为字符串 var response = tcp_client.get_string(tcp_client.get_available_bytes()) $ResponseLabel.text = "服务器回声: " + response # 短延迟避免占用过多CPU await get_tree().create_timer(0.1).timeout # 发送消息(绑定到SendButton的pressed信号) func _on_send_button_pressed() -> void: if not tcp_client.is_connected(): print("未连接到服务器") return var message = $LineEdit.text.strip_edges() if message.empty(): return tcp_client.put_string(message) $LineEdit.clear()
配置步骤
- 选中
SendButton,在编辑器右侧「信号」面板找到pressed信号,点击「连接」,选择根节点的_on_send_button_pressed函数完成绑定。 - 先运行你的Python服务端,再启动Godot场景,输入文本点击「发送」即可看到回声。
入门教程与学习建议
- 先厘清协议概念:你提到的WebSocket和当前使用的TCP是两种不同协议,如果后续需要WebSocket服务端,需修改Python代码使用
websockets库,Godot侧改用WebSocketClient节点。 - 官方文档重点章节:
- 直接查看Godot官方文档中
StreamPeerTCP的API说明,里面包含基础连接、收发的示例代码。 - 阅读官方「网络」专题中的「TCP客户端/服务器」部分,了解Godot网络编程的基础逻辑。
- 直接查看Godot官方文档中
- 官方演示项目:在Godot的官方示例库中搜索「Networking」相关项目,里面有现成的TCP通信Demo,可以直接参考调试。
- 分步学习:先实现基础的连接、收发,再逐步扩展到游戏需要的状态同步、规则处理,避免一开始就切入复杂场景。
内容的提问来源于stack exchange,提问作者Meme Magician
相关产品推荐
相关产品推荐

