问题标签 [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 投票
4 回答
10490 浏览

c++ - tcp 连接上的 recv() 问题

我在 C 中模拟 Windows 上的 TCP 通信。我有发送者和接收者通信。

发送方将特定大小的数据包发送给接收方。接收方获取它们并将接收到的每个数据包的 ACK 发送回发送方。如果发送方没有收到特定的数据包(它们在数据包内的标头中编号),它会再次将数据包发送给接收方。这是接收方的 getPacket 函数:

我使用firstTime是因为第一次接收方不知道发送方要发送给它的正常包大小,所以我使用 aMAX_PACKET_LENGTH来获取一个包,然后将正常包大小设置为我收到的字节数.

我的问题是最后一个包裹。它的尺寸小于包装尺寸。所以让我们说最后一个包大小是2,正常包大小是4。所以recv()得到两个字节,继续while条件,然后totalChunkLen < packetSize 因为2<4它再次迭代循环并且卡住了,recv()因为它阻塞了,因为发送者没有什么可以发送.

在发送方我无法关闭连接,因为我没有收到 ACK,所以这是一种死锁。接收方卡住了,因为它正在等待更多的包裹,但发送方没有任何东西要发送。

我不想使用超时recv()或在包头中插入一个特殊字符来标记它是最后一个。

我能做些什么?

0 投票
1 回答
755 浏览

send - MPI 中发送和接收的最佳数据大小

我正在使用 MPI 编写一个并行应用程序,其中主进程的数据大小大约与缓存一样大(在我正在处理的平台上为 4MB)以发送到每个进程。由于 4MB 对于 master 一次发送可能太大,因此有必要将整个数据分成适合发送和接收的特定大小的较小块。

我的问题是,考虑到整个数据的大小,对于发送和接收每个较小块的最佳大小有什么建议吗?

谢谢。

0 投票
1 回答
274 浏览

c++ - poll() 不标记可读数据

我正在尝试编写与 Bufferbloat 项目相关的网络基准测试。其中大部分都有效,但我无法读取发送到正在连续写入的套接字的单字节取消信号。

我的第一次尝试是这样的:

Tcpdump 显示客户端正在发送一个字节的数据包,但服务器从未响应它。奇怪的是,如果我随后手动终止客户端,服务器将响应取消数据包而不会点击“硬关机”路径。

我的下一次迭代是使用 poll():

这与早期代码的行为相同。

发生了什么事,我该如何解决?

0 投票
3 回答
2793 浏览

python - 处理来自 Python 套接字 recv 的数据

我正在使用 Python 2.7 套接字来接收数据:

我如何从数据中检索第一个无符号短线?数据如下所示:

0 投票
2 回答
1275 浏览

c++ - 通过套接字接收音频文件

我正在尝试从 C 中的套接字接收文件(音频,.CAF)(C++ 解决方案也可以)。我已经用字符串测试了套接字通信。我的问题是我不知道要为 recv(socket, buffer, buffer_size, 0) 中的第二个参数提供什么。我应该制作什么类型的“缓冲区”?我基本上想接收一个音频文件,然后播放它。但不知道如何接收音频文件本身。

有什么想法吗?

谢谢,

罗宾

0 投票
5 回答
10502 浏览

c++ - 使用epoll_wait时如何正确读取数据

我正在尝试将使用 IOCP 的现有 Windows C++ 代码移植到 Linux。决定使用epoll_wait来实现高并发后,我已经面临一个理论上的问题,即我们何时尝试处理接收到的数据。

想象一下两个线程调用epoll_wait,并且接收到两条结果消息,这样 Linux 就会解除对第一个线程的阻塞,很快就会解除第二个线程的阻塞。

例子 :

这种情况可以想象吗?即它可以发生吗?

有没有办法防止它,以避免在接收/处理代码中实现同步?

0 投票
3 回答
4810 浏览

perl - socket->recv() 与 <>?

我正在尝试完成一个需要从套接字读取 4 个无符号整数的小型 Perl 学习项目。我无法读取超过 1 个整数,在四处挖掘后我找到了解决方案。但我需要了解我做错了什么(并且已经阅读了几本 Perl 书籍、perldocs 等,但无济于事。)

示例 1:这是成功的解决方案代码(原始),假设以下两者的套接字连接都成功:

示例 2:我在下面尝试了这个。如果我在拆包之前打印输入,我只会得到一个整数:

具体问题:

  1. 在示例 1 中,“$/”到底是什么?它是如何“改变”<>,我认为它是 STDIN 的?
  2. 在示例 2 中,为什么我的 recv() 不会从套接字中取出一个以上的整数,是否有某种原因?我的理解(perldoc)是“大小”参数默认为“字节”,整数是 4 个字节?

任何帮助,指针等表示赞赏。顺便说一句,“学习项目”是 overthewire.org - 很酷的东西。

0 投票
2 回答
2128 浏览

c - select 和 recvfrom 的意外结果

如果在“超时”发生之前我没有将消息从其他程序发送到该程序,则 select 语句“失败”,因此我不能在其中使用 recvfrom 语句。我曾经这样做过,以便我的另一个程序在无限循环中与这个程序联系,它从未进入 if 语句。

什么工作:如果我在每次超时发生之前联系这个程序,一切都很好。如果我将 recvfrom 语句放在 if(___ && select) 之外,它完全可以正常工作。

这是一个小图,这个程序将被称为 Recv:

程序将很好地联系 A 和 B //回到循环开始

发布前 2 分钟,我决定最后看一下我以前的代码。我想我忘了

在 for 循环(其中 tv.tv_sec = 1)之后。

有人可以详细说明为什么有必要这样做吗?

0 投票
2 回答
2707 浏览

python - Python:停止套接字接收进程

我通过套接字模块从某些设备接收数据。但一段时间后,设备会停止发送包裹。然后我想中断for循环。虽然 True 不起作用,因为他收到了超过 100 个包裹。我怎样才能停止这个过程?s 代表套接字。

编辑:我认为 socket.settimeout() 是解决方案的一部分。另请参阅: 如何在 python 的 socket recv 方法上设置超时?

0 投票
2 回答
32752 浏览

c - c recv() 读取直到出现换行符

我正在用 C 编写一个 IRC 机器人,但遇到了障碍。

在我的主要功能中,我创建了我的套接字并连接,所有这些快乐的东西。然后我有一个(几乎)无限循环来读取从服务器发回的内容。然后我将读取的内容传递给辅助函数,processLine(char *line)- 问题是,以下代码读取直到我的缓冲区已满 - 我希望它只读取文本,直到出现换行符 (\n) 或回车符 (\r) (从而结束该行)

最终发生的事情是许多线路都卡在一起了,发生这种情况时我无法正确处理线路。

如果你不熟悉 IRC 协议,一个简短的总结就是当消息发送时,它通常看起来像这样::YourNickName!YourIdent@YourHostName PRIVMSG #someChannel :The rest on from here is the message sent... 例如,登录通知是这样的::the.hostname.of.the.server ### bla some text bla### 是一个代码(? ) 用于处理 - 即 372 指示以下文本是今日消息的一部分。

当它们全部塞在一起时,我无法读取哪一行的数字是什么,因为我找不到一行的开始或结束位置!

我非常感谢您的帮助!

PS:这是在 linux 上编译/运行的,但我最终想将它移植到 windows,所以我尽可能多地制作多平台。

PSS:这是我的 processLine() 代码: