问题标签 [sockets]

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 投票
5 回答
1191 浏览

.net - 套接字编程:某些 ISP 是否对 FTP 上传施加了速率限制?

我目前正在尝试使用我们的一款产品中的 FTP 上传功能来调试客户的问题。该功能允许客户将文件 (< 1MB) 上传到中央 FTP 服务器以进行进一步处理。FTP 客户端代码是用 VB.NET 内部编写的。

客户报告在尝试上传 300KB 到 500KB 范围内的文件时收到“远程主机强制关闭连接”错误。但是,我们使用更大的文件(相对而言)(即 3MB 及以上)在内部对此进行了测试,但从未收到此错误。我们使用相同的 FTP 登录凭据上传到客户端连接到的同一 FTP 服务器,唯一的区别是我们是在办公室完成的。

我知道 TCP 协议具有内置的流量控制,因此在单个 Send 调用中发送多少数据并不重要,因为该协议会相应地限制自己以匹配服务器的内部限制(如果我没记错的话。 ..)

因此,我唯一能想到的是,客户端和路由器之间的中间主机人为地对客户端进行限速并断开连接(我们以 512 字节块的形式循环发送文件数据)。

这是用于发送数据的循环(缓冲区是包含文件数据的字节数组):

客户的 ISP(或他们自己的防火墙)是否有可能对我们的客户端代码在给定时间段内可以发送的数据量施加人为的速率限制?如果是这样,处理这种情况的最佳方法是什么?我想显而易见的解决方案是在我们的发送循环中引入延迟,除非有办法在套接字级别执行此操作。

对我来说,ISP 会通过终止客户端连接来处理速率限制违规,这似乎真的很奇怪。为什么他们不只依赖 TCP/IP 的内部流量控制/节流机制?

0 投票
4 回答
149430 浏览

java - 如何检测远程侧套接字关闭?

您如何检测是否Socket#close()已在远程端的套接字上调用?

0 投票
36 回答
486516 浏览

networking - What is the difference between a port and a socket?

This was a question raised by one of the software engineers in my organisation. I'm interested in the broadest definition.

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 可以获得相同的结果。

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

0 投票
3 回答
1768 浏览

java - Java HttpURLConnection:它可以处理重复的标题名称吗?

我正在调试 Selenium-rc 代理服务器中的一些代码。罪魁祸首似乎是HttpURLConnection对象,其获取 HTTP 标头的接口无法处理重复的标头名称,例如:

通过HttpURLConnection(using getHeaderField(int n)and getHeaderFieldKey(int n)) 获取标题的方式似乎导致我的第二个 cookie 丢失。我的问题是

  1. 是不是HttpURLConnection自己应付不来,和
  2. 如果是这样,是否有解决方法?
0 投票
1 回答
2116 浏览

sockets - VxWorks 中有哪些类型的套接字?

Vxworks 支持标准的 IP v4 和 IP v6 套接字,但套接字也用于其他目的。
还有哪些其他类型的插座可用?

0 投票
6 回答
3111 浏览

java - 为什么即使在非阻塞套接字上,SocketChannel 的写入也总是全部完成?

在 Windows 上使用 Sun Java VM 1.5 或 1.6,我连接了一个非阻塞套接字。然后我用一条消息填充一个ByteBuffer要输出的消息,并尝试到write()SocketChannel。

如果要写入的量大于套接字 TCP 输出缓冲区中的空间量,我希望写入仅部分完成(这是我直观地期望的,这也是我对文档的理解),但这不是发生。write() 似乎总是返回报告写入的全部量,即使它是几兆字节(套接字的 SO_SNDBUF 是 8KB,比我的多兆字节输出消息少得多)。

这里的一个问题是我无法测试处理输出被部分写入的情况的代码(将兴趣集注册WRITE到选择器并执行 aselect()等待直到可以写入剩余部分),因为这种情况似乎永远不会发生。我不明白什么?

0 投票
3 回答
3941 浏览

linux - Perl 套接字如何在 Linux 下解析主机名?

我有一个(据我所知)完美运行的 Linux 设置(Ubuntu 8.04),其中所有工具(nslookup、curl、wget、firefox 等)都能够解析地址。然而,以下代码失败:

我验证了以下几点:

  • Perl 能够使用 gethostbyname 解析地址(即下面的代码有效):

    my $ret = gethostbyname('stackoverflow.com'); print inet_ntoa($ret);

  • 原始源代码在Windows下工作

  • 这就是它应该如何工作(即它应该解析主机名),因为 LWP 试图使用这种行为(事实上,我通过尝试调试为什么 LWP 不为我工作而偶然发现了这个问题)
  • 运行脚本不会发出 DNS 请求(因此它甚至不会尝试解析名称)。通过 Wireshark 验证
0 投票
11 回答
15785 浏览

linux - 是否可以在套接字上不监听?

调用listen(fd,backlog)后是否可以在套接字上取消监听?

编辑:我没有让自己清楚的错误。我希望能够暂时不听套接字。调用 close() 将使套接字处于 M2LS 状态并阻止我重新打开它(或者更糟糕的是,某些恶意程序可能会绑定到该套接字)

暂时不监听是向上游负载均衡器发出信号表明此应用暂时无法接受更多请求的一种方式(可能不是最好的方式)

0 投票
3 回答
3194 浏览

javascript - Python 套接字的问题:如何在任何浏览器中获取可靠的 POST 数据?

我用 socket 模块编写了小的 Python+Ajax 程序(在最后列出)来研究异步通信的 COMET 概念。

这个想法是允许浏览器通过我的 python 程序互相实时发送消息。

诀窍是让“GET messages/...”连接打开,等待消息回复。

我的问题主要在于我通过 socket.recv 所拥有的可靠性......

当我从 Firefox 发布时,它运行良好。

当我从 Chrome 或 IE 发布时,我在 Python 中获得的“数据”是空的。

有人知道浏览器之间的这个问题吗?

某些浏览器是否注入了一些 EOF 或其他字符会杀死“recv”的接收?

这个问题有什么已知的解决方案吗?

Python 中的 server.py:

HTML+Javascript中的client.html: