我计划在游戏服务器上使用TCP/IP和UDP协议。我已经用java和客户端在c++中安装了服务器,并使用TCP/IP协议将它们与一个漂亮的gui连接起来。我需要它们是UDP交互,因为UDP协议允许丢包,这对于一个具有位置和其他更新的在线游戏是必不可少的,如果发生错误,这些更新将不会对重新发送有任何好处。当我尝试将我的客户机和服务器转换为UDP协议时,我的问题就发生了。在java中,我注意到创建UDP连接将更加困难,因为它不像绑定到端口和等待连接( IMHO )那样容易,因此:
发布于 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检测
路径带宽检测
背书致谢
死连接检测
“短”包避免
还有更多。
发布于 2015-02-13 23:27:29
https://stackoverflow.com/questions/28510330
复制相似问题