问题标签 [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.
windows - 从尚未填充的资源中同步读取的线程的 CPU 使用率很高
(在win32/c++环境下工作)
ReadFile
我有一个函数,它以一个字节的固定大小(同步)调用以从SOCKET
资源(的WINSOCK
)读取。有多个线程在运行这个函数。数据从外部写入套接字,不受我控制。每当尚未写入数据时,我发现我exe
消耗了近 80% 的 CPU,并且使用率在上述线程之间相对平均分配(通常有 4 个)。
与ReadFile
OS api 一样,我希望它在内部异步实现以避免此类问题。我的问题是为什么会发生这种情况,我能做些什么来避免它。
c++ - C++ 服务器无法从客户端/Winsock 接收数据
我正在开发一个简单的客户端-服务器应用程序。但是,在客户端运行后,我在服务器端收到带有 recv() 的消息错误 10038。套接字编号描述符在客户端和服务器中保留相同的值,因此我认为没有套接字错误。任何帮助,将不胜感激。
客户:
服务器:
我是 Winsock 编程的初学者,任何帮助将不胜感激。
c++ - C++ 客户端无法发送到服务器/Winsock
我正在开发一个高级客户端-服务器程序,我将游戏手柄的代码(已按下的按钮)发送到服务器。由于我发送了多个手柄代码,因此在我的 C++ 代码的一段中,我必须重复客户端代码段。
每次我有东西要发送时,我都想调用一个函数。
客户端功能:
如您所见,客户端代码段不包含发送功能。这是因为,正如我所说,我并不总是发送相同的 char 变量。根据按下的按钮,发送不同的字符。例如:
代码段(发送 Δ 和 O 按钮):
但是,发送函数因 SOCKET_ERROR 而失败。为什么会这样?任何帮助,将不胜感激。
windows - IOCP、AcceptEx、重叠和 WSAEINVAL
我有一个使用 IOCP、套接字和重叠的服务器。最初一切都很好。侦听套接字使用 IOCP 上的 AcceptEx 传递给新创建的套接字。我可以很好地处理数千个连接。
当服务器进程处理落后时,它会关闭并断开监听端口。当它赶上来时,它将使用新的 IOCP 重新建立侦听端口。
我遇到的问题是,在重新建立侦听端口后,新连接到达后,我尝试使用与上面完全相同的代码路径来接受。AcceptEx 失败并显示 WSAEINVAL。
我知道我遗漏了一些细节(魔鬼总是在细节中,不是吗?)——但希望能在我应该寻找的地方提供帮助。
如果好奇的灵魂想要更多信息,我很乐意提供。
c++ - 收到我的消息时带有多余字符的原因可能是什么?
我正在尝试为我的学校项目制作一个使用winsock将信息(字符集)发送到另一个程序(客户端/服务器)的程序。
我发送的消息在另一端收到,但最后有额外的字符。IE 如果我想发送“hallo”,我会收到“hallod3”或一些随机符号。
PS:消息是从Client发送到Server的
这是我在服务器上的代码:
这是客户:
DEFAULT_BUFLEN 已定义(消息的长度),ShowMessage() 是来自 VCL 组件(我正在使用 Borland C++ Builder)的函数,它接受一个字符串并显示它。
PS:我在客户端确定了字符串'sendbuf'并且没有多余的字符,我什至在字符串的末尾添加了'\0'。
这里可能是什么问题?
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.
c - 重新启动 UDP 套接字以接受 DTLS 连接不起作用
我正在启动一个 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 也是一个全局变量。
c++ - Winsock RIO:RIOReceive 立即返回,没有 bytesTransferred
我在让winsock RIO 工作时遇到问题。似乎每次我发布 RIOReceive 时,它都会立即返回并传输 0 个字节,并且我的对等方无法获得消息。
发布 RIOReceive 后,我等待 RIODequeCompletion,它立即以 numResults = 1 出队,但是当我检查 RIORESULT 结构的 bytesTransferred 时,它是 0。这告诉我我没有正确设置这个东西,但我可以'找不到告诉我我还应该做什么的文档或示例。
互联网上的 RIO 似乎很少。我浏览了MSDN、Len Holgate 和 TheServerFramework、这个站点和两个 GitHub RIO 服务器。
RIOEchoServer 和 RIOServer_sm9 在 GitHub 上,但我不能发布两个以上的链接(这是我在这个网站上的第一个问题)。
这段代码只是为了证明事情。它目前没有设置为使用 sendCQ,不能很好地处理错误,等等......
以下是准备工作:
我现在发布一个 RIOReceive:
只要我调用 RIODequeCompletion,它就会返回 1:
但是当我检查 RIORESULT 的 bytesTransferred 时,它始终为 0:
就像我说的那样,我可能没有正确使用 RIOReceive,和/或我没有设置我需要的正确套接字选项(现在没有)。
我很感激这方面的任何帮助。
c - 无法在 win32 UDP 套接字应用程序中从 UDP 服务器接收数据
我有一个硬件 ARM 控件作为 UDP 服务器,我通过下面用 C# 编写的代码与它通信。PC是UDP客户端。服务器只是回显数据。
这工作正常,没有任何问题,而且很稳定。
现在,我想在 Win32 C 应用程序中使用相同的 PC 代码。我尝试了下面的代码。
此代码能够发送到 UDP 服务器并回显。但是 recvfrom 调用将等待数据直到无限时间。recvfrom 正在阻止呼叫。我给出了正确的 IP 地址和端口。我仍然无法在 Win32 应用程序中从服务器接收数据。你能帮我吗?
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。
任何人都可以在这里帮忙吗,我需要一种方法来验证确认是否有其他方法可以做到