0

我已经实现了这里显示的概念;http://wiki.unity3d.com/index.php/Simple_TCP/IP_Client__-_Server在统一之外,它可以工作。(尽管我不得不从头开始创建 TCPIPServerApp,因为我在任何地方都找不到基础项目)。

但是,我对如何正确使用 tcp/ip 有一些一般性问题。我已经对 tcp/ip 本身进行了一些研究,但我仍然有点困惑。

似乎使用上述方法并不能保证我会看到消息(res)。它只是检查每次更新以查看 res 中是否有不同的消息。如果发送了多条消息并且程序滞后或其他什么,我会错过较早的数据包吗?我应该做一个数组来存储最后的 X 条消息吗?

我怎么知道收到了数据?我是否需要添加消息 ID 并将我自己的 ack 构建到数据中?

我应该在建立连接之前检查端口是否正在使用中吗?

抱歉有这些问题。这对我来说是全新的,但我非常喜欢这个!

...安东已经回答了以下问题,谢谢

听起来 tcp 使用自己的数据包编号来确保数据包在另一端以正确的顺序结束。如果一个数据包丢失了,后续的数据包会被丢弃吗?还是这种编号和数据包排序仅用于处理分成多个数据包的数据?

TCP会在必要时自动将数据分成多个数据包,对吗?

4

1 回答 1

0

首先,TCP 是一个完整的连接协议,因此在发送任何段(在 TCP 级别称为数据)之前,客户端和服务器使用标准 TCP 握手 TCP 握手连接

因此,在客户端收到的每个段之后,它都会发回一个确认。所以只有在那之后,服务器才会发送另一个段。实际上他们发送的不是一个段,但是为了减少流量,服务器可以发送许多段。但是,想法还是一样的。同样,与客户端从不发回确认的 UDP 相比,TCP 是一种可靠的协议。因此,UDP 的一个例子是我们不依赖每个部分的任何射击游戏。每个人都肯定在游戏中看到了所谓的滞后。

当然 TCP 使用 ack ids 来确定段是否被确认!但它还需要知道如何构建所有段。记住所有数据都是按部分发送的,并且在需要重新构建之后!

同样,TCP 分段数据的方式取决于许多因素,它足够聪明,可以找出最佳方式。例如,某些网络可以有防火墙来阻止大于某个大小的数据包。因此,TCP 段大小可以不同。

于 2013-11-09T03:10:55.053 回答