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

c - 我必须在某处使用 recv() 从 TCP 套接字接收数据时遇到缓冲区限制

我正在从通过 TCP 套接字连接的测试仪器下载 6kB 的数据。我正在使用 SOCK_STREAM:

我没有设置任何缓冲区大小,所以我假设我使用的是默认值。我在接收数据时遇到问题。这是声明:

其中 YRaw 是一个 3000 个对象数组,每个对象是 2 个字节。

我在运行代码后观察到的问题是,在 YRaw 数组的大约 3/4 处,有一个零字符串,这是我将数组初始化为的字符串。看起来接收函数可以正常工作到数组的 3/4,然后跳过一大块 YRaw 数组(保留初始化值),然后再次拾取,并且 YRaw 数组填满。缓冲区中剩余的数据要读取,等于 YRaw 数组中跳过的值的数量。

我怀疑这与系统中的某些缓冲区有关。任何人都可以阐明如何解决这个问题吗?

不知道有没有关系,不过我也设置了TCP_NODELAY,如下图:

最好的问候, gkk

0 投票
3 回答
467 浏览

c - 如何在c中读取来自套接字的回复?

我正在尝试编写一个执行以下操作的 TCP 客户端:

我在第三种情况下遇到了困难。我没有收到来自网络服务器的任何回复。

这是我的代码:

0 投票
2 回答
624 浏览

c - winsock 的 recv 函数

我有一个关于winsock 的recv 功能的一般性问题。我编写了一个带有客户端/服务器架构的程序,其中客户端将相机图像发送到服务器,服务器将另一个图像发送回客户端。客户端发送多个图像,直到程序关闭。服务器将用另一个图像响应每个接收到的图像。

客户端(发送)---->服务器(接收)---->服务器(发送)---->客户端(接收)。^ _ __ _ __ _ __ _ ____循环_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ |

我的问题是服务器接收功能。如果我用 512Byte 的大缓冲区多次调用接收函数,我怎么知道我收到了整个图像?我发现的示例只是等到连接关闭(recv 返回 0),但我想在不关闭连接的情况下接收几张图像。但是,如果我接收到缓冲区中没有任何字节,recv 函数将暂停线程,直到有新字节为止(但这永远不会发生,因为服务器首先想在接收之前将自己的图像发送回客户端下一个)。

那么有没有可能告诉服务器整个图像已收到,以便它可以将自己的图像发送回客户端而无需等待下一个字节或关闭的连接?

0 投票
2 回答
1642 浏览

multithreading - Winsock 本地环回延迟

我正在使用 tcp 套接字在 Windows XP 上的两个应用程序之间提供进程间通信。我出于各种原因选择了 tcp 套接字。我看到平均往返时间为 2.8 毫秒。这比我预期的要慢得多。分析似乎表明延迟是在一个应用程序调用 send 和另一端的阻塞 recv 返回之间。

我也有应用程序、守护进程和客户端。它们的结构类似于以下伪代码:

守护线程 1(监听新连接):

守护进程 client_socket 线程(监听来自客户端的数据包):

客户端线程 1:

任何想法为什么延迟如此糟糕?我怀疑 Nagel 的算法,但在我的代码中乱扔:

没有帮助。我是否需要在客户端和守护程序套接字上都这样做(我正在这样做)?

我在一台几乎没有负载、没有磁盘活动等的四核机器上。

0 投票
2 回答
2389 浏览

nonblocking - 连接完成前非阻塞 TCP 套接字上的 recv 行为

朋友们,

我有一个非阻塞 TCP 套接字(在 AIX 上)。当我尝试 connect() 时,我得到了 EINPROGRESS。我的问题是,如果我在连接完成之前调用 recv(),那么(最合适的)错误代码是什么?

我看到了,万一连接失败,我调用recv(),我得到了ECONNREFUSED;表示我收到了与我之前的 connect() 尝试相对应的错误。采用相同的逻辑,我应该得到 recv() 的 EINPROGRESS。我的方法对吗?

如果是,这会引发另一个问题 - 为什么这样的错误代码不包含在 recv() 的错误代码中?

0 投票
1 回答
4238 浏览

c++ - winsock recv 给出 10014 错误

我将从代码开始:

现在,当我运行此代码时,ret 变为 -1,并且 WSAGetLastError() 返回 10014,这意味着指针错误。
但是我不明白为什么这不起作用?如果我注释掉 reinterpret_cast 行并使用它下面的行!
可以说 reinterpret_cast 是有风险的,但我认为应该没问题,因为 unsigned char 和 signed char 的大小完全相同。
据我所知,std::vectors 应该可以安全地直接在内存中寻址。

有趣的是,当我在 send() 中使用相同的向量类型做同样的事情时,它会起作用!发送功能:

正如我们所看到的,除了 CharBuf 在这种情况下是 const 之外没有任何区别,这能改变什么吗?

为什么 recv() 比 send() 更敏感?recv() 怎么能知道指针无效(显然不是)?它应该看到的只是一个 char 数组!

根据要求,我的整个接收功能(请记住,我无法拼出其中的每个功能,但我认为它们应该是不言自明的。

没关系。我在粘贴函数时发现了它。像往常一样,当你试图为别人解释它时,你会发现你的错误:) 我把它留给读者来找出问题所在,但我会给出 &pData[0] 作为提示。感谢您的帮助:D

0 投票
3 回答
42157 浏览

c - 通过 send() recv() 发送多条消息,Socket 编程,C

我正在尝试制作一个程序(客户端),它可以根据用户的请求向服务器发送消息。精简代码如下:

客户:

服务器:

现在,这适用于我发送的第一条消息。但是它无法建立另一个连接(我在客户端程序中尝试连接时收到错误消息“错误的文件描述符”。)谁能看到我误解了什么?谢谢 :)

0 投票
3 回答
2559 浏览

sockets - 使用 UDP 套接字接收数据

我正在写一个应用程序,但我一点也不明白。我正在尝试从特定客户端接收数据。在 TCP 套接字中,accept 返回一个fd数字,因此您可以通过该fd数字与特定客户端进行通信。

recvfrom中,任何东西都不能指定从该客户端接收数据。它从发送的每个人那里接收数据。我正在尝试解决这个问题,但我不知道该怎么做。

第二个问题是,打开一个套接字后,我打开了另一个套接字。我向客户端发送第二个套接字号,客户端在第二个套接字上发送第二个数据。在服务器端,服务器侦听第一个套接字(而不是第二个套接字)。但是,尽管客户端从第二个套接字发送数据并且服务器侦听第一个套接字,但服务器会获取数据。我将两个套接字打印为整数,并看到两个不同。服务器如何读取在第一个套接字上的第二个套接字上发送的数据?


是的,我的问题有点复杂。基本上我说:

如何告诉特定客户(例如客户 2)在上面的行中收听?(在 TCP 套接字中,它是按fd编号完成的,但在 UDP 套接字中是如何实现的?)。

0 投票
5 回答
8121 浏览

c++ - 使用 recv() 和 vector 的更优雅的方式

到目前为止,我有这个代码示例:

是否有另一种方式,在不使用 resize() 两次的情况下知道缓冲区中的数据长度?因为不可能将数据接收到未调整为适当大小的向量中。根据 C++ STL 文档,我认为 reserve() 方法不进行分配。还有一个问题:使用这种技术是内存泄漏安全的吗?

0 投票
2 回答
2219 浏览

c - recvfrom 无限接收问题

我正在使用 udp 套接字编写服务器。在客户端发送第一条消息进行连接后,我打开新套接字以在此套接字上与该客户端通信(用于侦听的第一个套接字)并为每个客户端创建一个线程。但是在线程中,while 循环会无限进行,因为 recvfrom 每次都接收数据,尽管任何客户端都发送数据。我的代码有什么问题?

下面的代码示例: