问题标签 [network-programming]

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.

0 投票
4 回答
20719 浏览

c# - 什么是 .net / c# 套接字编程的好教程/howto

我正在将使用 Winsock 控件的旧 VB6 代码移植到 C#。我没有做过任何套接字编程,我想知道是否有人有一个很好的参考/教程/howto,我可以用来开始加快速度。

当我继续进行通常效率低下的谷歌搜索时,我正在吸引蜂巢思维。

我现在使用的是 UDP,而不是 TCP。

0 投票
3 回答
6760 浏览

tcp - TCP 发送队列深度

我如何发现有多少字节已发送到 TCP 套接字但尚未在线上?

看这里的图表: http://www.tcpipguide.com/free/diagrams/tcpswpointers.png

我想知道类别 2、3 和 4 的总数或 3 和 4 的总数。这是在 C(++) 和 Windows 和 Linux 上。理想情况下,我可以使用一个 ioctl,但似乎没有。

0 投票
15 回答
71209 浏览

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

如果您遇到 TCP 连接可能太慢而 UDP“连接”可能太不可靠的情况,您会使用什么?有各种标准可靠的 UDP 协议,您对它们有什么经验?

请在每个回复中讨论一种协议,如果其他人已经提到了您使用的协议,那么请考虑对他们进行投票并在需要时使用评论进行详细说明。

我对这里的各种选项感兴趣,其中 TCP 处于规模的一端,而 UDP 处于另一端。有各种可靠的 UDP 选项可用,每个选项都为 UDP 带来了一些 TCP 元素。

我知道 TCP 通常是正确的选择,但列出替代方案通常有助于帮助人们得出这个结论。像 Enet、RUDP 等基于 UDP 构建的东西各有优劣,你用过吗,你的经验是什么?

为免生疑问,没有更多信息,这是一个假设性问题,我希望能引出一份答复清单,详细说明需要做出决定的人可以使用的各种选项和替代方案。

0 投票
3 回答
581 浏览

wcf - 有谁知道使用 WCF 为非 .NET 客户端公开 SOAP 接口的任何问题?

有谁知道使用 WCF 为非 .NET 客户端公开 SOAP 接口的任何问题?例如与其他 SOAP 库不兼容?

这样可以将 SOAP 接口公开给第三方以与我们的软件集成。

0 投票
7 回答
13521 浏览

linux - 与 SOCK_RAW 套接字的 TCP 握手

好的,我意识到这种情况有点不寻常,但我需要仅使用原始套接字(在 C 中,在 linux 中)建立 TCP 连接(3 次握手)——即我需要自己构建 IP 标头和 TCP 标头. 我正在编写一个服务器(所以我必须首先响应传入的 SYN 数据包),无论出于何种原因,我似乎都无法正确处理。是的,我意识到 SOCK_STREAM 会为我处理这个问题,但出于我不想进入的原因,这不是一个选择。

我在网上找到的关于使用原始套接字的教程都描述了如何构建 SYN 泛洪器,但这比实际建立 TCP 连接要容易一些,因为您不必基于原始数据包构建响应。我已经让 SYN 泛洪器示例正常工作,我可以从原始套接字读取传入的 SYN 数据包,但我仍然无法为来自客户端的传入 SYN 创建有效的 SYN/ACK 响应。

那么,有没有人知道一个关于使用原始套接字的好教程,它超越了创建 SYN 泛洪器,或者有没有人有一些可以做到这一点的代码(使用 SOCK_RAW,而不是 SOCK_STREAM)?我会很感激。


MarkR 是绝对正确的——问题在于内核正在发送重置数据包以响应初始数据包,因为它认为端口已关闭。内核正在击败我的响应并且连接消失了。我已经在使用 tcpdump 来监视连接了——我应该更加细心,并注意到有两个回复,其中一个是搞砸了的重置,以及我的程序创建的响应。哦!

似乎效果最好的解决方案是使用 MarkR 建议的 iptables 规则来阻止出站数据包。但是,按照建议,有一种比使用标记选项更简单的方法。我只是匹配是否设置了重置 TCP 标志。在正常连接过程中,这不太可能需要,如果我阻止来自正在使用的端口的所有出站重置数据包,这对我的应用程序并不重要。这有效地阻止了内核不需要的响应,但不是我自己的数据包。如果我的程序正在侦听的端口是 9999,那么 iptables 规则如下所示:

0 投票
4 回答
1902 浏览

c - 低于底层普通 bsd 套接字

你如何在 C 中做低级套接字,例如:实际发送一个 SYN。

0 投票
3 回答
3083 浏览

network-programming - 如何从 C 程序发送 ARP 数据包?

我正在使用 C 语言开发嵌入式 linux 系统,我正在寻找 Windows 中 SendARP 等价物的源代码。任何指针?

0 投票
7 回答
70540 浏览

security - 您将如何测试 SSL 连接?

我正在我的网络应用程序上试验 OpenSSL,我想测试发送的数据是否被加密并且不能被窃听者看到。

您可以使用哪些工具进行检查?这可以以编程方式完成,以便可以放在单元测试中吗?

0 投票
2 回答
9980 浏览

c# - C# 中多线程网络服务器的模式

有没有我可以遵循的模板/模式/指南来设计多线程服务器?通过我的谷歌搜索,我在网上找不到任何非常有用的东西。

我的程序将使用 TcpListener 启动一个线程来监听连接。每个客户端连接都将由它自己的 IClientHandler 线程处理。服务器会将 clientHandler.HandleClient 包装在一个委托中,调用 BeginInvoke,然后不再关心它。

我还需要能够干净地关闭监听线程,这是我在网上找不到很多例子的东西。

我假设 lock/AutoResetEvents/threading 魔术与 async BeginAceptTcpClient 和 EndAcceptTcpClient 的结合将使我到达那里,但是当涉及到网络代码时,对我来说一切都已经完成了。所以我必须相信我可以遵循一些模式,而不会被无数多线程的极端案例完全混淆,我似乎永远无法做到完美。

谢谢。

0 投票
12 回答
35342 浏览

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返回trueisClosed返回已经足够公平了false,但是为什么没有类似的东西isClosing呢?

下面是使用 pre-NIO 套接字的测试类。但是使用 NIO 可以获得相同的结果。

当测试客户端连接到测试服务器时,即使服务器启动关闭连接,输出也保持不变: