首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP和UDP组合

TCP和UDP组合
EN

Stack Overflow用户
提问于 2015-02-13 23:13:57
回答 2查看 4.8K关注 0票数 0

我计划在游戏服务器上使用TCP/IP和UDP协议。我已经用java和客户端在c++中安装了服务器,并使用TCP/IP协议将它们与一个漂亮的gui连接起来。我需要它们是UDP交互,因为UDP协议允许丢包,这对于一个具有位置和其他更新的在线游戏是必不可少的,如果发生错误,这些更新将不会对重新发送有任何好处。当我尝试将我的客户机和服务器转换为UDP协议时,我的问题就发生了。在java中,我注意到创建UDP连接将更加困难,因为它不像绑定到端口和等待连接( IMHO )那样容易,因此:

  • 是否可以通过UDP协议或任何其他协议让我的服务器“广播”数据,例如实体位置,并允许客户端接收数据,而不必实际建立到该服务器的永久连接。
  • 如果以上为否,是否可以将UDP和TCP/IP协议一起使用,而不必建立两个单独的连接。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 23:17:37

是否可以通过UDP协议或任何其他协议让我的服务器“广播”数据,例如实体位置,并允许客户端接收数据,而不必实际建立到该服务器的永久连接。

这就是您所能做的,因为UDP没有永久连接的概念。它只支持数据报。

如果以上为否,是否可以将UDP和TCP/IP协议一起使用,而不必建立两个单独的连接。

UDP是无连接的,不会有“单独的连接”。最好的思考方式可能是连接就是TCP,但当连接存在时,也可以使用UDP发送数据。

由于UDP并不总是在Internet上工作,所以我强烈建议将传输层与其他程序逻辑分离。您的传输层可以使TCP连接,并使用TCP连接,同意尝试UDP。如果UDP有效,您的层可以路由通过UDP连接通过UDP发送的数据。如果UDP失败,则可以将该数据包括在TCP连接中。您需要设计自己的封装/消息传递协议,以便在TCP连接上使用,包括协商和测试“侧”UDP连接的能力。

您应该记住,TCP所做的不仅仅是重传,如果您需要更多的其他东西,那么使用TCP可能比使用UDP更好。这一点尤其正确,因为TCP层是由网络专家开发并内置到操作系统中的,即使您不必担心重传,也不太可能做得更好。其中一些问题是:

会话设置、拆卸和跟踪

最后一次ACK处理和拜占庭故障

慢启动

检验求和与验证

指数退避

重排

重复检测

路径MTU检测

路径带宽检测

背书致谢

死连接检测

“短”包避免

还有更多。

票数 2
EN

Stack Overflow用户

发布于 2015-02-13 23:27:29

UDP是无连接的,它只需向接收方发送数据报,并希望它能够到达目的地(没有确认或任何类似TCP的内容)。

看一下这个例子:

Java服务器和客户端

或许还可以读一读文档:

编写数据报客户端和服务器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28510330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档