问题标签 [recv]

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 投票
1 回答
1309 浏览

python - Python:为什么这个对 recv 的非阻塞调用会阻塞?

我在线程的 $ init调用中有以下代码:

conn 是一个套接字,并作为参数传递给 $ init 每个线程都会收到一个唯一的套接字。在运行方法中,我有:

超时打印为 0.0,但“hi from threadname”仅在收到消息并且永远不会引发异常时打印出来!看起来好像 recv 方法阻塞了,但它为什么要这样做呢?

0 投票
2 回答
1356 浏览

sockets - 套接字编程:为什么 recv() 和 read() 的行为不一样?

我用来select()从标准输入接收数据。

代码在这里:

在这段代码中,recv()总是会返回-1,但read()可以得到正确的数据。

我发现这read()相当于recv()使用flags. 0那么为什么我的代码中的行为recv()read()不一样呢?

0 投票
1 回答
1717 浏览

linux - 判断socket上是否还有Data剩余并丢弃

我正在 Linux 下编写一个从 TCP 套接字获取数据的接口。用户提供一个缓冲区来存储接收到的数据。如果提供的缓冲区太小,我只想返回一个错误。第一个问题是确定缓冲区是否太小。recv() 函数只返回实际写入缓冲区的字节数。如果我使用 recv() 联机帮助页上说明的 MSG_TRUNC 标志,它仍然会返回相同的结果。第二个问题是丢弃仍在套接字中排队的数据。因此,如果我确定我提供的缓冲区太小,我只想擦除留在套接字上的所有内容。除了再次关闭和打开套接字或只是接收直到什么都没有之外,还有其他方法吗?此致

托比

0 投票
2 回答
1951 浏览

linux - 判断socket上是否还有Data剩余并丢弃

我正在 Linux 下编写一个从 TCP 套接字获取数据的接口。用户提供一个缓冲区来存储接收到的数据。如果提供的缓冲区太小,我只想返回一个错误。第一个问题是确定缓冲区是否太小。recv() 函数只返回实际写入缓冲区的字节数。如果我使用 recv() 联机帮助页上说明的 MSG_TRUNC 标志,它仍然会返回相同的结果。第二个问题是丢弃仍在套接字中排队的数据。因此,如果我确定我提供的缓冲区太小,我只想擦除留在套接字上的所有内容。除了再次关闭和打开套接字或只是接收直到什么都没有之外,还有其他方法吗?最好的问候 <

一个建议是只接收直到什么都没有留下(我返回 0)——但结果不是必须等待预设的超时(在这种情况下是 5 秒?),因为每次我调用 recv 时它都会等待数据或超时?

0 投票
2 回答
3666 浏览

python - 有没有办法知道 Python 套接字中有多少数据可以接收?

我发现我必须使用 ioctl。这里有类似的问题:

我的问题是:

  1. Python 中的 FIONREAD 等价物是什么?如何调用 sock.ioctl() 来获取可用的字节数?
  2. 如果我在 Windows 上使用 Python 2.5 会怎样?socket.ioctl 是 2.6 版中的新内容。
0 投票
2 回答
1148 浏览

c - C中的简单TCP客户端服务模型:客户端不接收

我在 c 中制作了一个简单的 TCP 客户端-服务器,并尝试将消息从客户端发送到服务器,但我遇到了一些问题。服务器确实发送了消息(整数值> 0)但客户端无法接收它(整数值> 0)这里是代码:客户端

服务器:

我得到的输出(首先启动服务器,然后是客户端)是服务器端:9 客户端:-1 hello

我正在使用 Ubuntu 11.04 和 gcc 编译器。

我希望有人可以提供帮助。谢谢

奥马尔

0 投票
4 回答
3766 浏览

c - 在 C 中立即从套接字接收 TCP 有效负载(逐个数据包)

如何逐个数据包地从 C 中的开放网络套接字接收数据(字节流)?我想在套接字到达时立即从套接字读取数据(一旦数据包到达机器上)。

似乎当我在套接字上执行 read()(或 recv())调用时,我得到了 10,000+ 字节的整个 TCP 消息。相反,我想接收第一个 TCP 段有效负载,处理它,然后继续下一个,等等。

注意 - 我不想要原始数据包。只是 TCP 段数据有效负载。

另请注意 - 本质上,我想通过在数据到达时立即处理数据来最小化延迟,而不是等待整个 TCP 消息在 TCP 层累积。

任何想法将不胜感激,谢谢!

0 投票
1 回答
1046 浏览

python - Python阻塞recv返回的数据少于要求的数据

我有一个 C 语言的回显服务器和一个 Python 的测试客户端。服务器有一个有限的读取缓冲区,例如 16 字节。当客户端发送超过 16 个字节时,它会先读取 16 个字节,然后写回客户端,然后再次读取。

我用 测试了服务器telnet,我得到了与输入相同的字符串,即使它超过 16 个字节。但是,此 Python 客户端不起作用。

此客户端仅接收服务器写回的前 16 个字节。服务器日志确实显示了两次写入 (16 + 4)。Python 输出如下所示

我不确定为什么会发生这种情况,为什么阻塞recv()返回的数据少于要求的数据?

0 投票
4 回答
498 浏览

c - C Windows 缓冲区大小

在 Windows 中,可以说我正在使用该recv函数从套接字接收数据。我很好奇最佳缓冲区有多大?我可以把它做成字节,1024或者我可以把它做成51200字节,或者更大。我想知道哪个对性能更好。

这不仅适用于recv函数,比如说我正在读取一个大文本文件,我想要一个非常大的缓冲区还是一个更小的缓冲区?

0 投票
3 回答
1231 浏览

c++ - 我应该如何干净利落地跳出 recv 循环?

recv在循环中使用该函数来接收网络数据,但是假设我想在循环中停止接收数据。我可以打破循环,但这似乎不是一种非常干净的方法来停止接收数据。

那么有什么方法可以干净地停止接收数据,或者只是打破循环好吗?这是 HTTP GET/POST 请求。

这是我正在使用的简化版: