问题标签 [winsock2]

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

delphi - GetMem 用于一个 PChar 变量更改其他 PChar 变量的内容

所以,我有以下问题。我有 2 个 PChar 变量。我首先分配内存,执行一些操作,为第二个变量分配内存 - 在这一步中,第一个变量包含错误值(我在调试时看到它)。这是代码:

在线上

当我寻找变量 HEADER 值时——我看到了一些惊人的东西——与我在程序开始时看到的不同。我该如何解决?

0 投票
2 回答
447 浏览

plugins - FireBreath FB::PluginWindowWin 包含问题

我尝试按照 浏览器插件中Directx控件的答案中的步骤进行操作

但是当我添加 http://colonelpanic.net/2010/11/firebreath-tips-drawing-on-windows/ FireBreath Tips: Drawing on Windows中提到的解决方案时

"1.使您的插件对象窗口特定

将 EVENTTYPE_CASE 中指定的事件源的类型更改为 FB::PluginWindowWin(以及处理程序中的类型),您将按照您需要的方式转换您的对象。”

我得到119个错误,都在winsock2.h文件中,我包含在其他文件中,说重新定义,不同的链接。该怎么办?

谢谢,萨拉

0 投票
3 回答
26371 浏览

c++ - WINSOCK - 为不存在的 IP 上的连接尝试设置超时?

我正在用 C++ 开发一个 RTSP 源过滤器,并且我正在使用 WINSOCK 2.0 - 阻塞套接字。

当我创建一个阻塞套接字时,我将其设置SO_RCVTIMEO为 3 秒,如下所示:

我的过滤器尝试连接IP_ADDRESS:554(554 是 RTSP 服务器端口)。如果有服务器在端口 554 上侦听该 IP,则一切正常,但是:

  1. 如果我的过滤器创建一个到现有 IP 地址的套接字,但在没有人监听的随机端口上,connect()等待 3 秒并返回WSAETIMEDOUT。所以 3 秒后,我知道提供的 URL 是错误的。

  2. 如果我的过滤器为不存在的 IP 地址创建一个套接字并尝试连接它,它会在返回 SOCKET_ERROR 之前挂起大约 10 秒。因此,SO_RCVTIMEO如果网络上不存在 IP,则会被忽略...

问题: 在第二种情况下,如何为不存在的 IP 设置超时?我是否需要先发送 ICMP PING 以查看 IP 是否存在,或者执行其他类似的检查?

任何帮助将不胜感激。谢谢。:)

我的问题的答案

因为我正在使用阻塞套接字,所以调用connect()阻塞,直到建立连接,或者连接失败,因为主机没有响应,或者它拒绝连接。如果我将套接字的超时设置为 3 秒,并尝试连接到不存在的主机,我的电脑(客户端)将发送SYN设置了标志的 TCP 数据包,以启动三向握手。通常,如果主机启动,将响应包含 TCP 数据包ACKSYN设置标志,然后客户端(我)将发送带有ACK标志设置的 TCP 数据包。然后建立连接。但是,如果主机关闭并SYN发送,客户端会等待 3 秒超时到期,然后再尝试一次,再一次,直到TcpMaxConnectRetransmissions微软文章)注册表设置已达到,因为主机可以启动但SYN数据包可能会丢失......我的Windows XP有这个设置为4,我猜,所以每次它尝试发送SYN时,它等待3秒,当第四尝试失败,它返回SOCKET_ERROR(12 秒后),并设置WSAETIMEDOUT为最后一个 WSA 错误。

解决这个问题的方法是使用非阻塞套接字,并connect()按照 Martin James 的建议尝试手动测量连接尝试时间(因为现在不会阻塞)。

另一种方法是摆弄注册表,这是最后的手段......

0 投票
1 回答
120 浏览

c++ - 在调试器中时 Winsock2 数据丢失

我将 Winsock2 与重叠 I/O 结合使用。这意味着我用 WSAOVERLAPPED 结构调用 WSARecv,然后我用 WSAWaitForMultipleEvents 等待数据。

我做了一个奇怪的观察,当我用调试器停止它时,我似乎丢失了发送到我的应用程序的任何数据。我认为这些数据会堆积在操作系统的某个地方,然后在下一次调用 WSARecv 时传递。

我的假设是错误的吗?

0 投票
1 回答
238 浏览

sockets - 使用套接字时有关函数调用约定的建议

我计划使用套接字在客户端 32 位应用程序和 64 位应用程序之间进行函数调用。

通过套接字接口调用函数、传递变量和返回参数的最佳方案是什么。我可以控制客户端和服务器代码,所以我可以实现任何东西。

我在想,让套接字数据包由以下内容组成: - 1 个字:函数名的长度(字符数) - 字符串:实际的函数名 - 1 个字:函数参数的长度(以字节为单位) - 函数参数

请让我知道,什么是最健壮和可扩展的方法。也许我可以重用编译器、Web 服务或虚拟机调用约定所使用的原则。

提前致谢

0 投票
1 回答
105 浏览

winsock - 确定使用 Winsock2 接收的数据包

有没有办法确定在 Winsock 中使用 recv() 时收到了多少数据包?我正在寻找在客户端实施的解决方案,对服务器端没有特殊要求(我无法控制)

0 投票
1 回答
1549 浏览

c - WSAPoll on named fd ::需要建议如何重写它

我有一些POSIXC要移植到 Windows (WinSocks 2.2) 的代码,并且我在 (not only) 的 MS 实现方面遇到了问题poll()

我对 POSIX 有一些经验sockets,但我对 WinSock2 很陌生,我在 MSDN 上没有找到任何有用的线索,所以我在这里问:“如何在 Windows 上做出与此示例代码相同的行为?”

函数connect_to_addr()只是为了演示fd第二个字段的样子。

WinSocks下如何实现这个常用习语?感谢您的建议。

更好的是,WSAPoll() 从 Vista 开始就在 ws2_32.dll 中;如何让它在XP下工作?

0 投票
4 回答
2930 浏览

c - 在socket和fd之间确定

在 unix 上,一切都是函数的文件方法,read()Win32不支持。write()close()

我想模仿它,但不知道如何区分WinSocks2sock上的socketfd

这应该像这样工作:


如何实现is_net_socket以使用它,如下所示:

0 投票
1 回答
753 浏览

gcc - Winsock2.h:FD_SET:有符号和无符号整数表达式之间的比较

摘自winsock2.h:

我正在传入fdtypeintsettype fd_set *。看起来警告的原因可能来自 #define for FD_SETSIZE。同一标题的另一个摘录:

我在包含 winsock2.h 之前重新定义FD_SETSIZE了,64U但这似乎并没有解决它。

0 投票
1 回答
692 浏览

sockets - 如何获取先前传递给 bind() 调用的套接字信息?

Winsock 2,Windows XP SP3。

我有一个套接字,它以前被传递给 bind() 函数,现在我想从套接字中获取这些信息。更具体地说,我想要套接字绑定到的端口号。我所拥有的只是 SOCKET 实例。

我该怎么做呢?顺便说一句,套接字是UDP。

我的目的是我想创建一个新的原始 UDP 套接字并通过原始套接字构建 ip 标头和 udp 标头和隧道信息,但我不知道将什么放入源端口,因为我不知道什么它是必然的。