问题标签 [winsockets]

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 回答
112 浏览

windows - 从尚未填充的资源中同步读取的线程的 CPU 使用率很高

(在win32/c++环境下工作)

ReadFile我有一个函数,它以一个字节的固定大小(同步)调用以从SOCKET资源(的WINSOCK)读取。有多个线程在运行这个函数。数据从外部写入套接字,不受我控制。每当尚未写入数据时,我发现我exe消耗了近 80% 的 CPU,并且使用率在上述线程之间相对平均分配(通常有 4 个)。

ReadFileOS api 一样,我希望它在内部异步实现以避免此类问题。我的问题是为什么会发生这种情况,我能做些什么来避免它。

0 投票
1 回答
1277 浏览

c++ - C++ 服务器无法从客户端/Winsock 接收数据

我正在开发一个简单的客户端-服务器应用程序。但是,在客户端运行后,我在服务器端收到带有 recv() 的消息错误 10038。套接字编号描述符在客户端和服务器中保留相同的值,因此我认为没有套接字错误。任何帮助,将不胜感激。

客户:

服务器:

我是 Winsock 编程的初学者,任何帮助将不胜感激。

0 投票
1 回答
242 浏览

c++ - C++ 客户端无法发送到服务器/Winsock

我正在开发一个高级客户端-服务器程序,我将游戏手柄的代码(已按下的按钮)发送到服务器。由于我发送了多个手柄代码,因此在我的 C++ 代码的一段中,我必须重复客户端代码段。

每次我有东西要发送时,我都想调用一个函数。

客户端功能:

如您所见,客户端代码段不包含发送功能。这是因为,正如我所说,我并不总是发送相同的 char 变量。根据按下的按钮,发送不同的字符。例如:

代码段(发送 Δ 和 O 按钮):

但是,发送函数因 SOCKET_ERROR 而失败。为什么会这样?任何帮助,将不胜感激。

0 投票
2 回答
416 浏览

windows - IOCP、AcceptEx、重叠和 WSAEINVAL

我有一个使用 IOCP、套接字和重叠的服务器。最初一切都很好。侦听套接字使用 IOCP 上的 AcceptEx 传递给新创建的套接字。我可以很好地处理数千个连接。

当服务器进程处理落后时,它会关闭并断开监听端口。当它赶上来时,它将使用新的 IOCP 重新建立侦听端口。

我遇到的问题是,在重新建立侦听端口后,新连接到达后,我尝试使用与上面完全相同的代码路径来接受。AcceptEx 失败并显示 WSAEINVAL。

我知道我遗漏了一些细节(魔鬼总是在细节中,不是吗?)——但希望能在我应该寻找的地方提供帮助。

如果好奇的灵魂想要更多信息,我很乐意提供。

0 投票
2 回答
116 浏览

c++ - 收到我的消息时带有多余字符的原因可能是什么?

我正在尝试为我的学校项目制作一个使用winsock将信息(字符集)发送到另一个程序(客户端/服务器)的程序。

我发送的消息在另一端收到,但最后有额外的字符。IE 如果我想发送“hallo”,我会收到“hallod3”或一些随机符号。

PS:消息是从Client发送到Server的

这是我在服务器上的代码:

这是客户:

DEFAULT_BUFLEN 已定义(消息的长度),ShowMessage() 是来自 VCL 组件(我正在使用 Borland C++ Builder)的函数,它接受一个字符串并显示它。

PS:我在客户端确定了字符串'sendbuf'并且没有多余的字符,我什至在字符串的末尾添加了'\0'。

这里可能是什么问题?

0 投票
1 回答
2129 浏览

c++ - Windows TCP Socket Timeout C++

I have a question

How to know if a client didn't respond to the server during a specified time ?!

I am using threading not select function.

your help will be greatly appreciated :)

Thank you.

0 投票
0 回答
845 浏览

c - 重新启动 UDP 套接字以接受 DTL​​S 连接不起作用

我正在启动一个 UDP 服务器,然后接受一个 DTLS 连接来读取传入的数据。代码工作正常。但是一旦我通过重新启动客户端套接字重用来自客户端的连接,服务器就无法读取任何内容。使用 Cyassl 库创建 SSL 实例。

在客户端:套接字绑定和 DTLS 初始化很好,因为它重新使用了之前使用的 DTLS 上下文。

在服务器中:套接字关闭和启动一切都很好,但我仍然无法在接受的 FD 中接收。

但是,如果我在关闭和启动 UDP 服务器之间设置了 5 秒的睡眠时间,一切都很好。但我不想像睡眠一样使用阻塞 I/O。

请帮忙。服务器:

接受在 m_udp_fd 中收到的数据:

连接断开的位置取决于 TCP 连接是否断开。这被完美地击中了:

UDP读取连接功能:

打开 DTLS 服务器方法:这里 dtls_ctx 和 dtls_meth 是全局变量。

m_ssl_accept 功能:ssl_m 也是一个全局变量。

0 投票
2 回答
1644 浏览

c++ - Winsock RIO:RIOReceive 立即返回,没有 bytesTransferred

我在让winsock RIO 工作时遇到问题。似乎每次我发布 RIOReceive 时,它​​都会立即返回并传输 0 个字节,并且我的对等方无法获得消息。

发布 RIOReceive 后,我等待 RIODequeCompletion,它立即以 numResults = 1 出队,但是当我检查 RIORESULT 结构的 bytesTransferred 时,它是 0。这告诉我我没有正确设置这个东西,但我可以'找不到告诉我我还应该做什么的文档或示例。

互联网上的 RIO 似乎很少。我浏览了MSDNLen Holgate 和 TheServerFramework、这个站点和两个 GitHub RIO 服务器。

RIOEchoServer 和 RIOServer_sm9 在 GitHub 上,但我不能发布两个以上的链接(这是我在这个网站上的第一个问题)。

这段代码只是为了证明事情。它目前没有设置为使用 sendCQ,不能很好地处理错误,等等......

以下是准备工作:

我现在发布一个 RIOReceive:

只要我调用 RIODequeCompletion,它就会返回 1:

但是当我检查 RIORESULT 的 bytesTransferred 时,它始终为 0:

就像我说的那样,我可能没有正确使用 RIOReceive,和/或我没有设置我需要的正确套接字选项(现在没有)。

我很感激这方面的任何帮助。

0 投票
1 回答
624 浏览

c - 无法在 win32 UDP 套接字应用程序中从 UDP 服务器接收数据

我有一个硬件 ARM 控件作为 UDP 服务器,我通过下面用 C# 编写的代码与它通信。PC是UDP客户端。服务器只是回显数据。

这工作正常,没有任何问题,而且很稳定。

现在,我想在 Win32 C 应用程序中使用相同的 PC 代码。我尝试了下面的代码。

此代码能够发送到 UDP 服务器并回显。但是 recvfrom 调用将等待数据直到无限时间。recvfrom 正在阻止呼叫。我给出了正确的 IP 地址和端口。我仍然无法在 Win32 应用程序中从服务器接收数据。你能帮我吗?

0 投票
1 回答
663 浏览

loadrunner - Load Runner Windows Sockets 程序 lrs_save_param 参数问题(错误代码:9005)

看到 Load Runner Windows Sockets 程序 lrs_save_param 参数问题(错误代码:9005)

在 Data.ws 文件中,我已声明缓冲区如下

行动部分我的代码如下

LR日志文件中的输出如下

Action.c(89): lrs_receive(socket, RecvBuff) Action.c(89): 缓冲区长度不匹配(预期30字节,实际接收20字节,相差10字节)

Action.c(91): lrs_save_param(socket, get_last_received_buffer, param1, 1, 20) Action.c(91): 错误:保存参数无效。错误代码:9005。

任何人都可以在这里帮忙吗,我需要一种方法来验证确认是否有其他方法可以做到