草庐IT

c++ - DLL 中的非阻塞套接字(无窗口)

我有一个通过单个套接字连接到服务器的DLL。我面临以下问题:如果服务器的IP地址和端口为假或服务器已关闭,则使用此DLL的应用程序会卡住半分钟。我的想法是使用非阻塞套接字来避免该问题,方法是显示一个指示连接进度的窗口,并允许取消此过程。但是我没有窗口处理程序,怎么能使用WSAAsyncSelect函数呢? 最佳答案 如果你想使用WSAAsyncSelect类型的套接字,那么你的Dll将需要创建至少一个消息窗口来处理套接字事件。由于窗口将永远不可见,因此它的WindowProc将仅包含一个处理程序,用于您的自定义消息(WM_USER+

c++ - Winsock 接受事件有时会停止发出信号 (WSAEventSelect)

我对属于多线程套接字服务器的一段遗留c++/winsock代码有疑问。该应用程序创建一个线程来处理来自客户端的连接,通常一次有几百个连接。它通常可以毫无问题地运行数天(连续),然后突然停止接受连接。这只发生在生产中,从不测试。它使用WSAEventSelect()来检测FD_ACCEPT网络事件。连接处理程序的(简化)代码是:SOCKETlistener;HANDLEhStopEvent;//...initialiselistenerandhStopEvent,andotherstuff...HANDLEhAcceptEvent=WSACreateEvent();WSAEventSel

c++ - 如何编写一个好的程序来阻止不需要的/有害的网站

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。Improvethisquestion我打算编写一个简单的应用程序来阻止不需要的/恶意网站的网络流量(HTTP和HTTPS)。假设:一开始逻辑很简单。在浏览器中输入“黑名单”中的地址后,我的逻辑应该控制通信并发送由我定义的网站内容稍后我想添加一些逻辑来搜索网页正文以查找不需要的/有害的词程序将用C++编写我不想使用现有的库(开源等),只能从头开始编写。J只想学习windows网络机制和层数不幸的是,在使用Windows中的网络层时,我是一个门

c - Windows 上多线程应用程序中非阻塞服务器/监听套接字的最佳方法?

我正在Windows上编写TCP服务器/客户端应用程序,以熟悉WinsockAPI。我有UNIX背景,想知道以下哪种方法是实现应用程序的最佳方法:首先是规范必须能够在多处理器和单处理器系统上很好地扩展。没有硬件连接限制。应用程序既可以监听连接,充当服务器,也可以充当客户端。多线程。第一种方法:在“服务器”线程中用于监听的非阻塞类选择套接字。我们为每个连接的客户端生成一个单独的线程。第二种方法:在“服务器”线程中阻塞用于监听的套接字。我们为每个连接的客户端生成一个单独的线程。第三种方法:在“服务器”线程中用于监听的非阻塞类选择套接字。每个传入连接都没有单独的线程,我想协议(protoco

java - 谁能解释 Windows (7 Pro N) 和 Linux ( Ubuntu 12-04) 之间的套接字吞吐量差异

在评估3rd方软件(使用NIO的Java框架)时,我们发现该框架在Windows上的吞吐量约为Linux上的50%。假设有一些影响Windows的JVM或操作系统设置,我们将开始测试跨两个平台的简单计算(Fibonacci、heapsort、strcat等)和对象构建。在所有情况下,操作系统都差不多。然而,当我们使用简单的ServerSocket和ClientSocket(java.netjdk1.7u5)执行吞吐量测试时,我们注意到Linux吞吐量可以高达Windows的10倍,尤其是对于小消息(100字节)。我们的直接假设是操作系统套接字发送/接收缓冲区大小不同,并且它们在吞吐量中

c++ - 如何使用 Winsock LSP 修改出站 UDP 流量?

我正在构建一个应用程序,它需要在DHCPv6数据包到达线路之前对其进行动态修改。我正在使用DHCPv6供应商选项做一些非常专有的工作,我需要能够在传输之前检查和修改内存中的这些选项。我通过修改Microsoft示例代码在Winsock之上构建了一个概念验证分层服务提供程序。它拦截传出的HTTP数据包,将referrer-agent更改为有趣的东西,然后按原样发送数据包。在Wireshark中验证,效果很好。更改我的安装程序代码也很简单,这样我的LSP就可以链接到UDP/IPv6而不是TCP/IPv4之上,现在,在附加调试器的情况下,我可以看到自己获得了带有堆栈的回调DHCP服务器。但是

Windows 套接字 write() 意外被 read() 阻塞

(这是以前asked问题的更新转发,使用我丢失凭据的旧帐户发布)我正在编写一个客户端-服务器程序,其中客户端是C++/winapi,服务器是C#/.net。套接字是一个AF_INET/SOCK_STREAM,我在客户端使用Readfile()和WriteFile()作为套接字IO。客户端有一个从服务器读取的循环(并且可能会阻塞调用线程[denotet1],这对我来说很好)。它还有另一个线程[表示t2],它等待一个超时的事件对象。如果达到超时(并且事件尚未被单选),t2线程将在同一个套接字上写入(精确到字节)。我遇到的问题是,在t1上的读取返回之前,写入似乎不会返回(在某些合法场景中,它

c++ - WinSock2 getaddrinfo 解析主机名

我想使用getaddrinfo解析主机名并获取IPv4和IPv6地址。文档说要做到这一点,“提示”参数可以为NULL。但是,我应该如何处理“servicename”参数?我只想要地址而不将其与任何服务/端口相关联。我可以将该参数保留为NULL或空字符串吗?它有效,但这样做是否正确?gethostbyname函数似乎只用于该任务,但根据文档,它已被弃用,应该改用getaddrinfo。 最佳答案 documentation还说:OneorbothofthepNodeNameorpServiceNameparametersmustpoi

windows - WINSOCK recv 调用返回 -1 但 WSAGetLastError() 设置为 0

我有一段代码在Windows上调用recv()。recv()有时会返回-1。调用WSAGetLastError()返回0。这似乎是非常奇怪的行为。以前有没有人注意到这一点。 最佳答案 WSAGetLastError()目前是GetLastError()的简单别名。WinSock不保留自己单独的错误代码(尽管没有什么可以阻止Microsoft将来进行更改)。与任何其他Win32API函数一样,确保您没有在recv()和WSAGetLastError()之间进行任何Win32调用,否则您有丢失的风险错误代码。始终在执行任何其他操作之前,

python - 使用 Winsock 获取套接字列表

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion如何获取进程中所有套接字文件描述符的列表?是否可以在Python中执行此操作,或者我必须在C中使用Winsock执行此操作?