问题标签 [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.
networking - 应该如何为新服务选择默认 TCP/IP 端口?
在开发将侦听 TCP/IP 端口的应用程序时,应该如何选择默认端口?假设此应用程序将安装在多台计算机上,并且需要避免端口冲突。
c# - 在 .NET 中查找下一个 TCP 端口
我想为 WCF 服务调用创建一个新的 net.tcp://localhost:x/Service 端点,并动态分配一个新的开放 TCP 端口。
我知道当我打开与给定服务器的连接时,TcpClient 将分配一个新的客户端端口。
有没有一种简单的方法可以在 .NET 中找到下一个打开的 TCP 端口?
我需要实际的数字,以便我可以构建上面的字符串。0 不起作用,因为我需要将该字符串传递给另一个进程,以便我可以在该新通道上回调。
tcp - TCP/IP 是否防止数据包重放?
TCP/IP 是否会阻止同一数据包的多个副本到达目的地?还是由端点在其上方分层幂等性逻辑?
如果可能,请参考 TCP/IP 规范中的特定段落。
c# - 套接字客户端类的异常与结果代码
我有一个封装与服务器的 tcp 套接字通信的类。对于发送到服务器的每条命令消息,服务器都会发回一个响应消息,该响应消息总是包含一个响应代码(OK,Fail)。使用我的课程,每个命令都可以同步或异步执行。
基本上可以发生两种类型的异常:由断开连接或其他不可恢复的错误引起的“故障”和“发送缓冲区已满”等意外异常。如果发生故障,在重新建立连接之前,任何命令都无法继续或重试或任何其他操作。在响应失败甚至异常的情况下,可以再次尝试该命令...
所以,现在我的同步命令方法返回一个可以具有以下值的枚举:OK、Fail、Fault。如果发生异常,则简单地将其引发到调用线程(在同步命令中)。对于异步命令,Result 属性枚举值可以包含一个额外的值:OK、Fail、Fault 或 Exception,并且回调可以通过命令对象的 Exception 属性访问实际的异常对象。
你怎么看这个策略?我很想根本不为同步命令引发异常,而只是在内部记录异常并返回第 4 个枚举值,因为这就是我在任何给定情况下真正对异常所做的一切......或者,我应该不使用结果代码,只是在所有情况下引发异常,甚至是错误?
谢谢。
java - 如何检测远程侧套接字关闭?
您如何检测是否Socket#close()
已在远程端的套接字上调用?
wcf - WCF 未绑定到正确的 IP 地址
我们在出现一些问题的 Windows 2003 服务器上部署了 WCF 服务。配置正在使用wsHttpBinding
,我们正在指定 IP 地址。这些服务由 Windows 服务托管。
当我们启动服务时,大多数情况下它会抓取错误的 IP 地址。有几次它绑定到正确的地址只是为了放弃该绑定并在处理一小会后转到绑定到 NIC 的另一个地址(有 2 个)。
它目前正在使用端口 80(我们已将 IIS 配置为仅通过 绑定到 1 个地址httpcfg
),尽管我们已尝试使用不同的端口获得相同的结果。
当 Windows 服务开始托管 WCF 服务时,属性显示它被绑定到正确的地址;但是,tcpview 显示它确实在侦听错误的地址。
这是设置基本地址的配置部分。绑定的最终是 0.4 而不是 0.9
- 是否还有其他需要设置的配置?
- 是否有工具可以帮助追踪绑定到错误地址的位置?
java - 为什么不尝试 I/O 就不可能检测到 TCP 套接字已被对等方优雅地关闭?
作为最近一个问题的后续,我想知道为什么在 Java 中,如果不尝试在 TCP 套接字上读/写,就不可能检测到套接字已被对等方优雅地关闭?无论使用 pre-NIOSocket
还是 NIO似乎都是这种情况SocketChannel
。
当对等方优雅地关闭 TCP 连接时,连接两端的 TCP 堆栈都知道这一事实。服务器端(启动关闭的那个)以 state 结束FIN_WAIT2
,而客户端(没有明确响应关闭的那个)以 state 结束CLOSE_WAIT
。为什么没有方法Socket
可以SocketChannel
查询 TCP 堆栈以查看底层 TCP 连接是否已终止?是不是 TCP 栈没有提供这样的状态信息?或者是为了避免对内核进行昂贵的调用而做出的设计决定?
在已经发布了这个问题的一些答案的用户的帮助下,我想我知道问题可能来自哪里。没有明确关闭连接的一方最终处于 TCP 状态CLOSE_WAIT
,这意味着连接正在关闭并等待该方发出自己的CLOSE
操作。我想isConnected
返回true
和isClosed
返回已经足够公平了false
,但是为什么没有类似的东西isClosing
呢?
下面是使用 pre-NIO 套接字的测试类。但是使用 NIO 可以获得相同的结果。
当测试客户端连接到测试服务器时,即使服务器启动关闭连接,输出也保持不变:
tcp - 大容量TCP Client的设计
我有一个 .NET TCP 客户端,它向(.NET 异步)TCP 服务器发送大量消息。
我需要继续向服务器发送消息,但由于 TIME_WAIT,我用完了客户端上的端口。
程序如何在不使用所有可用端口的情况下持续可靠地发送消息?
有没有办法继续重用同一个套接字。我查看了 Disconnect() 和 REUSEADDRESS 套接字标志,但找不到任何使用它们的好例子。事实上,大多数消息来源都说不要使用 Disconnect,因为它是用于较低级别的使用(即它只回收套接字句柄)。
我在想我需要切换到 UDP 还是有使用 C++ 和 IOCP 的方法?
tcp - TCP 连接寿命
我可以期望客户端/服务器 TCP 连接在野外持续多长时间?
我希望它保持永久连接,但事情发生了,所以客户端将不得不重新连接。我在什么时候说代码有问题而不是某些外部设备有问题?
tcp - NAT 端口转发的最佳选择是什么?
我想让用户可以轻松地将其 NAT 上的端口转发到我的 C++ 应用程序的本地计算机。我想让这项工作在 OSX 和 Windows 上运行。Linux 将是一个很大的好处,但 Linux 用户可能更愿意手动转发端口,所以这不是一个问题。LGPL 类型代码是可以的,但我不能使用任何直接 GPL 的东西。
我很想听听任何人在这方面的任何想法或经验,但我想到了一些具体的问题: