【问题标题】:TCP/IP Implementation General QuestionsTCP/IP 实施一般问题
【发布时间】:2013-11-09 11:49:11
【问题描述】:

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

不过,我有一些关于如何正确使用 tcp/ip 的一般性问题。我对 tcp/ip 本身做了一些研究,但我还是有点困惑。

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

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

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

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

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

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

如有必要,TCP 会自动将数据分成多个数据包,对吧?

【问题讨论】:

    标签: c# sockets tcpclient tcp-ip tcpserver


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多