问题标签 [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.
delphi - GetMem 用于一个 PChar 变量更改其他 PChar 变量的内容
所以,我有以下问题。我有 2 个 PChar 变量。我首先分配内存,执行一些操作,为第二个变量分配内存 - 在这一步中,第一个变量包含错误值(我在调试时看到它)。这是代码:
在线上
当我寻找变量 HEADER 值时——我看到了一些惊人的东西——与我在程序开始时看到的不同。我该如何解决?
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文件中,我包含在其他文件中,说重新定义,不同的链接。该怎么办?
谢谢,萨拉
c++ - WINSOCK - 为不存在的 IP 上的连接尝试设置超时?
我正在用 C++ 开发一个 RTSP 源过滤器,并且我正在使用 WINSOCK 2.0 - 阻塞套接字。
当我创建一个阻塞套接字时,我将其设置SO_RCVTIMEO
为 3 秒,如下所示:
我的过滤器尝试连接IP_ADDRESS:554
(554 是 RTSP 服务器端口)。如果有服务器在端口 554 上侦听该 IP,则一切正常,但是:
如果我的过滤器创建一个到现有 IP 地址的套接字,但在没有人监听的随机端口上,
connect()
等待 3 秒并返回WSAETIMEDOUT
。所以 3 秒后,我知道提供的 URL 是错误的。如果我的过滤器为不存在的 IP 地址创建一个套接字并尝试连接它,它会在返回 SOCKET_ERROR 之前挂起大约 10 秒。因此,
SO_RCVTIMEO
如果网络上不存在 IP,则会被忽略...
问题: 在第二种情况下,如何为不存在的 IP 设置超时?我是否需要先发送 ICMP PING 以查看 IP 是否存在,或者执行其他类似的检查?
任何帮助将不胜感激。谢谢。:)
我的问题的答案
因为我正在使用阻塞套接字,所以调用connect()
阻塞,直到建立连接,或者连接失败,因为主机没有响应,或者它拒绝连接。如果我将套接字的超时设置为 3 秒,并尝试连接到不存在的主机,我的电脑(客户端)将发送SYN
设置了标志的 TCP 数据包,以启动三向握手。通常,如果主机启动,将响应包含 TCP 数据包ACK
并SYN
设置标志,然后客户端(我)将发送带有ACK
标志设置的 TCP 数据包。然后建立连接。但是,如果主机关闭并SYN
发送,客户端会等待 3 秒超时到期,然后再尝试一次,再一次,直到TcpMaxConnectRetransmissions
(微软文章)注册表设置已达到,因为主机可以启动但SYN
数据包可能会丢失......我的Windows XP有这个设置为4,我猜,所以每次它尝试发送SYN
时,它等待3秒,当第四尝试失败,它返回SOCKET_ERROR
(12 秒后),并设置WSAETIMEDOUT
为最后一个 WSA 错误。
解决这个问题的方法是使用非阻塞套接字,并connect()
按照 Martin James 的建议尝试手动测量连接尝试时间(因为现在不会阻塞)。
另一种方法是摆弄注册表,这是最后的手段......
c++ - 在调试器中时 Winsock2 数据丢失
我将 Winsock2 与重叠 I/O 结合使用。这意味着我用 WSAOVERLAPPED 结构调用 WSARecv,然后我用 WSAWaitForMultipleEvents 等待数据。
我做了一个奇怪的观察,当我用调试器停止它时,我似乎丢失了发送到我的应用程序的任何数据。我认为这些数据会堆积在操作系统的某个地方,然后在下一次调用 WSARecv 时传递。
我的假设是错误的吗?
sockets - 使用套接字时有关函数调用约定的建议
我计划使用套接字在客户端 32 位应用程序和 64 位应用程序之间进行函数调用。
通过套接字接口调用函数、传递变量和返回参数的最佳方案是什么。我可以控制客户端和服务器代码,所以我可以实现任何东西。
我在想,让套接字数据包由以下内容组成: - 1 个字:函数名的长度(字符数) - 字符串:实际的函数名 - 1 个字:函数参数的长度(以字节为单位) - 函数参数
请让我知道,什么是最健壮和可扩展的方法。也许我可以重用编译器、Web 服务或虚拟机调用约定所使用的原则。
提前致谢
winsock - 确定使用 Winsock2 接收的数据包
有没有办法确定在 Winsock 中使用 recv() 时收到了多少数据包?我正在寻找在客户端实施的解决方案,对服务器端没有特殊要求(我无法控制)
c - WSAPoll on named fd ::需要建议如何重写它
我有一些POSIX
C
要移植到 Windows (WinSocks 2.2) 的代码,并且我在 (not only) 的 MS 实现方面遇到了问题poll()
。
我对 POSIX 有一些经验sockets
,但我对 WinSock2 很陌生,我在 MSDN 上没有找到任何有用的线索,所以我在这里问:“如何在 Windows 上做出与此示例代码相同的行为?”
函数connect_to_addr()
只是为了演示fd
第二个字段的样子。
WinSocks下如何实现这个常用习语?感谢您的建议。
更好的是,WSAPoll() 从 Vista 开始就在 ws2_32.dll 中;如何让它在XP下工作?
c - 在socket和fd之间确定
在 unix 上,一切都是函数的文件方法,read()
Win32不支持。write()
close()
我想模仿它,但不知道如何区分WinSocks2sock
上的socket或fd。
这应该像这样工作:
如何实现is_net_socket
以使用它,如下所示:
gcc - Winsock2.h:FD_SET:有符号和无符号整数表达式之间的比较
摘自winsock2.h:
我正在传入fd
typeint
和set
type fd_set *
。看起来警告的原因可能来自 #define for FD_SETSIZE
。同一标题的另一个摘录:
我在包含 winsock2.h 之前重新定义FD_SETSIZE
了,64U
但这似乎并没有解决它。
sockets - 如何获取先前传递给 bind() 调用的套接字信息?
Winsock 2,Windows XP SP3。
我有一个套接字,它以前被传递给 bind() 函数,现在我想从套接字中获取这些信息。更具体地说,我想要套接字绑定到的端口号。我所拥有的只是 SOCKET 实例。
我该怎么做呢?顺便说一句,套接字是UDP。
我的目的是我想创建一个新的原始 UDP 套接字并通过原始套接字构建 ip 标头和 udp 标头和隧道信息,但我不知道将什么放入源端口,因为我不知道什么它是必然的。