问题标签 [tcp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 检测 TCP 客户端断开连接
假设我正在运行一个简单的服务器并accept()
从客户端建立了一个连接。
判断客户端何时断开连接的最佳方法是什么?通常,客户端应该发送关闭命令,但如果它手动断开连接或完全失去网络连接怎么办?服务器如何检测或处理这个?
.net - WCF 双工服务和 TCP 端口耗尽
我正试图解决这个问题。我正在制作一个特定于业务的消息传递应用程序,它将通过 WCF(没有 vpns,整个网络)将 5000 到 10,000 台机器连接回我们的数据中心。它主要用于警报,我需要能够直接向特定客户端发送消息,而 WCF 允许我使用双工合同来完成所有这些工作,但是对于这么多客户端,它让我开始考虑最大化 TCP 端口空间65535 个端口。
我将假设所有入站连接都将通过我选择的任何端口进入,但返回客户端的出站连接将分别占用一个端口。我很好奇 WCF 端口共享服务是否可以解决此问题,或者它是否只有 65535 个端口到 IP 地址?那么,MSN Messenger 之类的如何处理这种情况。诚然,我可能永远达不到它,但至少我正在进入这个领域。
还是服务端的 WCF 双工合同在客户端期间保持端口打开以进行回调,还是释放它?
linux - 什么是 TCP 中的最大段生命周期 (MSL)?
我们有一个自制的 XMPP 服务器,有人问我我们服务器的 MSL(最大段生命周期)是多少。
它是什么意思,我如何获得它?它在 Linux /proc
TCP 设置中吗?
networking - 使用状态机的网络服务器/客户端的通用架构
全部,
所以,我发明了一个简单的协议,我想用它来让客户端与服务器交谈。这是典型的(我认为)三相布局:
- 连接建立(最终将包括能力协商)
- 实际数据交换 - 数据包愉快地来回传输',由相应的接收器解释,并相应地作用于它们
- Connection Teardown - 一方说“不想再”,另一方说“就这样吧”(最终将允许另一方发送一些数据直到完成,而不是简单地关闭对话)
该框架是一个简单的设置:服务器执行 java.net.ServerSocket.accept() 并启动一个线程来处理客户端的传入连接,该客户端创建一个 java.net.Socket() 到服务器所在的主机/端口在等待。双方使用 java.io.InputStream 和 java.io.OutputStream 并互相喷出数据,组装传出和解析传入的消息。很好,到目前为止。
到目前为止,该协议是硬编码的。连接建立和拆除几乎没问题,而数据交换部分——我想是全双工的——几乎是一团糟。
所以,我想,让我们做一个好方法,并使用同名的设计模式来设置状态机。我非常清楚服务器和客户端的状态分别应该是什么,发生转换应该发生什么样的事件,以及发生转换时应该采取什么行动。这看起来不错——在纸面上,就是这样。在实践中,我遇到了几个我无法在纸上解决的问题。
特别是,状态机的输入......有点多样化。我怎么可能同时写入数据、读取数据和检查连接(它可能已关闭或已断开)?此外,第 1 和第 3 阶段应该设置计时器,以避免潜在的无限等待答案的时间。
因此,我将不胜感激任何可以弥合理论状态机和代码状态机之间差距的帮助。
顺便说一句,我也可以阅读 C/C++/C# - 无需翻译成 Java(这是我正在使用的)。
networking - Windows 2008 并发 TCPIP 连接
在 Windows XP 中,Microsoft 决定在以后的服务包中限制半开连接的数量。据传修补 tcpip.sys 可以解决此问题。Windows 2008 中是否存在这样的限制,如果存在,是否可以配置?
windows - 环回接口上的 TIME_WAIT
为什么与环回接口的 TCP 连接最终会出现TIME_WAIT
(套接字关闭并SO_DONTLINGER
设置),但与不同主机的相同连接不会结束TIME_WAIT
(它们会立即重置/销毁)?
以下是用于说明的场景:
(A) 两个应用程序,一个客户端和一个服务器,都在同一台 Windows 机器上运行。客户端通过服务器的loopback接口(127.0.0.1,端口xxxx)连接服务器,发送数据,接收数据,关闭socket(SO_DONTLINGER
设置)。
假设连接非常短暂,因此客户端应用程序每秒都在建立和销毁大量连接。最终结果是套接字最终在 中TIME_WAIT
,并且客户端最终耗尽了它的最大套接字数(在 Windows 上,默认情况下约为 3900,我们假设此值不会在注册表中更改)。
(B) 与场景 (A) 相同的两个应用程序,但服务器在不同的主机上(客户端仍在 Windows 上运行)。这些连接在各方面都是相同的,只是它们的目的地不是 127.0.0.1,而是其他一些 IP。这里客户端机器上的连接不会进入TIME_WAIT
,客户端应用程序可以无限期地继续建立连接。
为什么会出现差异?
http - 为什么我不能在对称通道上获得相等的上传和下载速度?
我被分配到一个项目,我的代码应该在同一 FTP 或 HTTP 服务器上同时执行一些文件的上传和下载。对速度进行了测量,并由此得出了一些结论。
现在,问题在于,在高速连接上,我们在吞吐量方面获得了几乎预期的结果,但在慢速连接(想想理想的 CDMA 1xRTT 链接)上,无论下载还是上传都会以相反的方向为代价获胜。我有一个“更高的身体”,他确信 CDMA 1xRTT 连接是对称的,因此我们应该能够在此链路上以相同的速度(每个方向约 100 kbps)执行数据传输。
我的测量结果表明,如果不对缓冲区大小和数据链路节流方面的代码进行大量调整,就不可能在上述条件下具有相同的速度。我尝试了我的多线程代码,还创建了一个简单的批处理文件,它可以自动执行 Windows 的 ftp.exe 以执行数据传输——结果相同。
所以,问题是:真的有可能在一条慢速对称链路上以同等速度执行数据传输吗?“更高的身体”是否符合他们的期望?如果是,您对我应该如何处理我的代码以实现这样的吞吐量有什么建议吗?
PS。我完全重写了这个问题,所以很明显它属于这个网站。
networking - LDAP 套接字保持活动状态
我们正在使用 OpenLDAP 客户端库连接到 LDAP 服务器。问题是,如果一段时间内没有活动,服务器(或中间的防火墙)会断开 TCP 连接。
我们当前的“keep-alive”实现只是不时搜索baseDN - 有更好的想法吗?
windows - SIO_FLUSH 的行为
在 Windows 环境(在用户空间)中使用 SIO_FLUSH 套接字 ioctl 时,我对会发生什么感到困惑。这是:(1) 将 TCP/IP 发送队列中的数据完全丢弃到黑洞中,或者 (2) 通过连接推送排队的发送数据,直到缓冲区为空,或者 (3) 其他什么?谢谢!
python - 在扭曲协议中定期运行函数
我正在寻找一种方法来定期通过连接到 TCP 端口的所有客户端发送一些数据。我在看twisted python,我知道reactor.callLater。但是如何使用它定期向所有连接的客户端发送一些数据?数据发送逻辑在协议类中,由reactor根据需要进行实例化。我不知道如何将它从反应堆绑定到所有协议实例......