我正在为一个大学项目创建一个游戏服务器,所以我这样做时没有使用任何库/框架。经过大量研究,我希望客户端和服务器使用UDP协议(protocol)进行大量通信,例如角色移动和计时器,因为游戏这方面的可靠性不是那么重要,丢失的数据包可以得到补偿.但我还想将TCP协议(protocol)用于游戏的其他一些方面,例如在信息到达客户端方面至关重要的Action和事件。我的问题是我对一般情况下和在Java中使用UDP了解不多,根据我的理解,它与只为TCP使用一个开放的Socket对象是完全不同的。我认为客户端和服务器之间的初始连接将由TCP完成,然后一旦建立此连接,服务器是否应该将端口号发送回客户
我有一个实时应用程序(使用websockets的C++)必须通过拥挤的LAN进行通信。因为它是实时的,所以不能容忍延迟。在这种情况下,UDP的性能会优于TCP吗?我不能容忍数据包丢失,但如果使用UDP,可以通过重试来解决。 最佳答案 在拥塞的网络中,是的,UDP将发送它的数据包比TCP更快,这是因为TCP使用称为congestioncontrol的机制将拥塞考虑在内。.UDP没有拥塞控制,因此它会以本地网络接口(interface)允许的速度发送数据包。因此,如果您的首要任务是发送数据包,那么UDP就是最佳选择。但是,如果您也有兴趣
在RTIconnextDDS的UDP传输中使用多个端口,而在RTIconnextDDS的TCP/IP中只使用一个端口有什么好处?? 最佳答案 UDP端口映射由OMGRTPSDDS互操作性有线协议(protocol)规范(http://www.omg.org/spec/DDSI-RTPS/)定义,平台特定模型(PSM):UDP/IP。有一些优点/要求证明使用不同的端口进行发现和数据流量是合理的。最相关的是:流量差异化:使用不同的端口更容易识别不同类型的流量。这对双方都有用调试(例如,使用wireshark),以及应用不同的处理发现和用
我正在学习套接字并在SOCK_SEQPACKET通信协议(protocol)中找到数据或记录边界一词?任何人都可以简单地解释什么是数据边界以及SOCK_SEQPACKET与SOCK_STREAM和SOCK_DGRAM有何不同? 最佳答案 这个答案https://stackoverflow.com/a/9563694/1076479对消息边界(“记录边界”的不同名称)有一个很好的简洁解释。将该答案扩展到SOCK_SEQPACKET:SOCK_STREAM在两个对等点之间提供可靠、有序的数据流通信。它不维护消息(记录)边界,这意味着应用
我想在python中构建一个数据包嗅探器,它能够嗅探数据包、分析它们并在第二步中将数据包注入(inject)本地接口(interface)。我找到了一个示例,我必须稍微调整一下才能工作。我的工作版本如下所示:frompprintimportpprintimportsockets=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_TCP)s.bind(("192.168.1.100",0))#s.socketopt(socket.IPPOROT_IP,socket.IP_HDRINCL,1)#s.ioct(socket
我正在制作一个带有lua客户端和Java服务器的服务器。我需要压缩一些数据以减少数据流。为了做到这一点,我使用LibDeflate在客户端压缩数据localconfig={level=1}localcompressed=LibDeflate:CompressDeflate(data,config)UDP.send("21107"..compressed..serverVehicleID)--Senddata在服务器上我用它来接收数据包(TCP)out=newPrintWriter(clientSocket.getOutputStream(),true);in=newBufferedRe
我有一个PC程序通过UDP从20个自定义硬件盒接收数据。这些盒子中的每一个都不断地将UDP消息发送到PC上的单个UDP套接字。这些消息都包含10-150字节的数据,每个单元在12秒内发送大约20条消息。测试显示PC遗漏了一些消息。网络上的盒子越少,错过的消息就越少。长期的解决方案是在硬件中缓冲数据,让PC根据需要通过TCP检索数据,但我需要在短期内解决/尽量减少丢失消息的问题,直到可以部署该解决方案。想法包括:-升级电脑-在传输前过滤掉不必要的消息-将硬件中单独的UDP消息组合成一个更大的消息-在PC中使用多个套接字接收消息我正在寻找有关这些想法的反馈,以及我们可能遗漏的任何反馈。接收
我正在尝试实现一种机制,其中客户端通过UDP向服务器发送编码消息。收到此消息后,需要在服务器和客户端之间建立TCP连接。我面临这个奇怪的问题,当我尝试与客户端建立TCP连接时,如果服务器事先收到来自客户端的UDP数据包,客户端的connect()会失败。如果我尝试在没有任何UDP消息传递的情况下与客户端建立TCP连接,那么一切正常。我附上了服务器端和客户端的代码。intsockfd,sockfd2,newsockfd,n;charmsg[1000];sockaddr_inserverAddress,serverAddress2,clientAddress;socklen_tlen=si
考虑原型(prototype)多人游戏服务器。允许连接到服务器的客户端下载map和脚本。创建TCP连接来完成此操作很简单。但是,服务器必须继续通过UDP响应其余客户端。如果允许TCP下载连接使可用带宽饱和,UDP流量将遭受严重的数据包丢失。处理此问题的最佳方法可能是什么?通过跟踪时间以某种方式“限制”TCP上传连接似乎绝对是个好主意,并在固定的时间间隔内发送send()。这样,如果UDP数据包丢失开始更频繁地发生,则TCP连接可能会进一步受到限制。操作系统是否仍倾向于将数据捆绑在一起而不是源源不断地发送出去?我希望多久调用一次send()?我想这样做太频繁会导致数据首先被缓冲在一起,从
我好像找不到答案,所以我问你。股票Icecast2服务器是否使用TCP或UDP来广播流数据?我知道它使用自定义的基于HTTP的应用层协议(protocol),所以有人可能认为它是TCP,但另一方面它是一个广播应用程序,所以UDP对我来说更合乎逻辑。如果它仍然使用TCP,为什么要这样做? 最佳答案 Icecast和SHOUTcast都将TCP用于源流和到终端客户端的流。这有很多好处:大多数互联网广播电台使用的编解码器不适合丢失大块数据。如果流损坏,无论是丢失的还是乱序的数据包,解码器有时能够重新同步并继续,但很多只会失败。大多数互联网