草庐IT

file - 通过互联网发送文件的可靠方式

首先:我不确定这是问的正确地方,但我认为这个问题比super用户或服务器故障更适合这里,因为这是从程序员的角度来看的问题:我认为更多的程序员可能有同样的问题(虽然我找不到这个具体问题!)。我想在我的程序中添加一个功能,允许用户将文件发送给“friend”。您可以通过用户名找到friend:这一切都通过可以提供friendIP地址的服务器进行。我想使用tcp连接来发送文件。然而,当一方(或双方)位于NAT之后时,这就变得困难了。解决这个问题的最佳方法是什么?我听说可以通过服务器发送内容,但我宁愿直接发送所有内容,以避免服务器开销。我听说过一种叫做打洞的技术,但它实现起来相当复杂,而且不是

tcp - EPOLLRDHUP 不可靠

我正在使用epoll_wait在客户端-服务器TCP连接上使用非阻塞读/写。问题是,我无法使用EPOLLRDHUP标志可靠地检测“peerclosedconnection”事件。经常发生没有设置标志的情况。客户端使用close()并且服务器在大多数情况下从epoll_wait接收到EPOLLIN|EPOLLRDHUP事件。正如预期的那样,读取产生零字节。不过,有时只有EPOLLIN出现,产生零字节。使用tcpdump进行的调查表明,据我所知正常关机发生了。我看到一个Flags[F.]、Flags[F.]、Flags[.]事件序列,它们应该对应于FIN、FIN和ACK。SO_LINGER

networking - 如果 UDP 不可靠,为什么在传输层使用它

抱歉这个愚蠢的问题。传输层的功能是消息的可靠传递。UDP本质上是不可靠的,那我们为什么要在传输层使用它呢?谢谢编辑:澄清一下,我已经阅读了Wiki和其他来源。我的问题是UDP是不可靠的(我知道它的原因、优势和使用地点等),为什么不在其他层而不是传输层使用它(UDP),这意味着可靠性。 最佳答案 有时,快速且无间断地发送数据比流的可靠性更重要。DNS使用UDP,因为DNS服务器和客户端之间的交易单程仅包含一个数据包。如果数据包丢失,将根据客户端的请求重新传输。同样,流式视频通常使用UDP作为传输协议(protocol),因为偶尔丢失数

TCP 握手可靠性

其实我想知道,在一次tcp握手中,为什么client需要ackback来完成握手。postsyn和syn-ack,双方都有足够的信息来启动数据,tcp仍然要求客户端的ack以移动到建立状态。问题是,为什么这三次握手是实现可靠性的充分必要条件,即使我们在第二个消息本身后同步序列号也是如此。有什么见解吗? 最佳答案 服务器怎么知道客户端收到了SYN-ACK?服务器无法知道这一点,除非客户端明确发送ACK以确认它已获得同步确认。如果第三个ACK​​被丢弃,服务器将重新发送一个SYN-ACK,当客户端收到重复的SYN-ACK时,它会说“哦,

c# - .NET TCP 协议(protocol)有多可靠?

我是C#的新手,所以请多多包涵。我正在用C#.NET4.0编写一个相对简单的客户端服务器应用程序。我正在使用TCP协议(protocol),更具体地说,TCPListener和TCPClient。我知道TCP协议(protocol)在理论上是如何工作的。但我必须100%确定在数据传输过程中不会出现(未处理的)错误。发送数据后,我如何知道数据是否被成功接收。我可以完全依赖TCP协议(protocol)的底层实现吗?所以不需要我从另一方确认数据已收到?我真正知道哪些数据已发送并成功接收,这一点至关重要。我知道这是一个愚蠢的问题,但我真的很想确定。感谢您的宝贵时间和答复。

tcp - UDP组播可靠的实现方法

我正在准备我的大学考试,去年的问题之一是“如何使UDP多播可靠”(如tcp,丢失数据包的重传)我想过这样的事情:服务器使用UDP发送组播每个客户端发送接收该数据包的确认(使用TCP)如果服务器意识到不是每个人都收到数据包,它会向特定客户端重新发送多播或单播问题是可能有一个客户端经常丢失数据包并强制服务器重新发送。好吃吗? 最佳答案 Everyclientsendacknowledgementofreceivingthatpackets(usingTCP)为每个数据包发送一个ACK​​,并使用TCP这样做,不能扩展到大量的接收者。使用

networking - 为什么UDP+软件可靠点餐系统比TCP快?

现在有些游戏使用网络系统,通过UDP传输消息,并确保消息的可靠性和有序性。例如,RakNet是一个流行的游戏网络引擎。它仅使用UDP进行连接,并有一个完整的系统来确保数据包可靠且有序(如果您愿意)。我的基本问题是,这是怎么回事?TCP与有序、可靠的UDP不是一回事吗?是什么让它变得如此慢,以至于人们不得不重新发明轮子? 最佳答案 通用/特化TCP是一个通用的可靠系统UDP+任何特殊用途的可靠系统。专用的东西通常比通用的东西更好,因为它们是专门的东西。流/消息TCP是基于流的UDP是基于消息的将离散游戏信息映射通常更好地发送到基于消息

networking - 用于可靠网络连接的实用 NAT 穿越

我已经看到并阅读了很多类似的问题,以及相应的维基百科文章(NATtraversal、STUN、TURN、TCPholepunching),但是大量的信息并不能真正帮助我我的问题很简单:我正在编写一个P2P应用程序,我希望NAT后面的我的应用程序的两个用户能够相互连接。连接必须可靠(与TCP的可靠性相当),所以我不能只切换到UDP。该解决方案无需重新配置即可在当今的通用系统上运行。如果有帮助,该解决方案可能涉及可连接的第3方,只要它不必代理整个数据(例如,获取对等方的外部(WAN)IP地址)。据我所知,我唯一的选择是使用“可靠的UDP”库+UDPholepunching.是否有用于此的(

.net - 像 UDP 一样广播,具有 TCP 的可靠性

我正在开发一个完全在单个网络内运行的.net解决方案。当用户对系统进行更改时,我想发布一个公告,让其他人听到并采取相应的行动。有没有一种方法可以像这样广播消息(例如UDP允许您这样做)同时保持有保证的传送(例如TCP)?这是在一个小型网络(30个左右的客户端)上,如果这会有所作为的话。 最佳答案 几乎所有游戏都需要UDP的快速响应特性(以及较小程度上的无连接特性)和TCP的可靠性。他们所做的是在UDP之上构建自己的可靠协议(protocol)。这使他们能够将数据包突发到任何地方,并有选择地使它们可靠。可靠的数据包系统通常是一个简单的

sockets - 当您需要可靠的 UDP 时,您使用什么?

如果您遇到TCP连接可能太慢而UDP“连接”可能太不可靠的情况,您会使用什么?有各种标准可靠的UDP协议(protocol),您对它们有什么经验?请针对每个回复讨论一种协议(protocol),如果其他人已经提到您使用的协议(protocol),请考虑对他们进行投票,并在需要时使用评论进行详细说明。我对这里的各种选项很感兴趣,其中TCP处于范围的一端,而UDP处于另一端。有各种可靠的UDP选项可用,每个选项都将TCP的一些元素带到UDP。我知道TCP通常是正确的选择,但拥有备选方案列表通常有助于人们得出该结论。Enet、RUDP等建立在UDP之上的东西各有利弊,你用过吗,体验如何?为避