gpt4 book ai didi

c++ - socket编程初学者问题

转载 作者:行者123 更新时间:2023-11-30 04:20:28 25 4
gpt4 key购买 nike

我对整个套接字和服务器开发真的很陌生,我还不熟悉它是如何工作的。

我制作了一个简单的 flash 应用程序,需要与套接字进行通信,有了它,我使用了一个支持 AS3 并在“Red Tamarin”上工作的套接字,

好吧,我进入正题:

我目前有一个始终运行 socket.receive() 的循环它响应甚至显示我从 Flash 应用程序发送的文本。

我的目标是获得一个简单的在线 flash 游戏,大概是用SQL/SQLite来保存信息并导出给播放器,

我不明白的是我怎么能把它带到那里..

我认为我需要做的是这样的:

在服务器端:

  • 有一个只要服务器还活着就运行的循环,该循环应该始终检查它与客户端的每个连接并等待来自它们的命令,例如登录、更新玩家位置、断开连接、请求对象列表在给定的位置

客户端:

  • 根据 Action 向服务器发送信息,比如当玩家移动时,将新的位置发送到服务器,类似这样:“MovePlayer[name][x][y]”

我的计划真的应该如此吗?关于发送的实际信息,我很好奇,不断发送服务器字符串数据是否有效? (这就是我习惯使用的,而不是一些奇怪的字节和东西)

提前致谢!

最佳答案

您走在正确的轨道上。但我鼓励您首先定义一个通信协议(protocol)。您可以从定义命令的外观开始。例如:

COMMAND <space> PARAM1 <space> PARAM2 <line-break>

关于协议(protocol)定义的一些注意事项:

  1. 如果 PARAM1 是一个字符串并且包含空格怎么办?如何区分每个参数的开始和结束?
  2. 您的参数也可以包含换行符。
  3. 如果您的客户端应用程序是由您的客户安装的,他们将需要不时更新它。更复杂的是,他们可能会运行旧版本并期望它能正常工作,即使您更改了协议(protocol)。这强加了对协议(protocol)版本控制的需要。如果您需要用户交互来更新应用程序的客户端部分,请记住这一点。

对于您的场景,这些是我能想到的最基本的考虑因素。可能还有其他重要的考虑因素,但其中大部分取决于您的游戏的运行方式。如果您认为我忘记了 OP 应该考虑的事情,请随时修改我的列表。

定义命令的外观后,记录您认为应用程序需要的所有命令。不要分离命令的定义,除非它对于您的某些操作来说变得太复杂或太长。尽量让事情变得简单。

现在回到你的问题:

Is my plan really how things should be?

是的。这正是它应该的样子。

And about the actual information being sent, I'm curious, will it be efficient to constantly send the server string data? (that's what I'm used to work with, not some weird bytes and stuff)

这取决于很多因素:

  1. 您使用的协议(protocol)(TCP、UDP 等);
  2. 并发客户端数;
  3. 处理命令的平均时间;
  4. 你们会向其他玩家广播更新吗?
  5. 您是如何实现服务器应用程序的;
  6. body 限制:
    1. 硬件:CPU、内存等;
    2. 网络:带宽、延迟等;

TCP vs UDP
(来源:it20.info)

关于c++ - socket编程初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15279406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com