草庐IT

c++ - 如何使用win32编写socket通信程序

想学习win32套接字编程的新人。我了解一点MFC,但这不是开始的好点,因为它只是隐藏了程序员的内部细节。 最佳答案 使用winsock函数(Winsock2.h)。 关于c++-如何使用win32编写socket通信程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/558028/

c++ - C 函数 **ntohl** 给出链接器错误(未解析的外部)

函数ntohl为我提供了一个链接器错误:errorLNK2001:unresolvedexternalsymbol_ntohl@4fatalerrorLNK1120:1unresolvedexternals我已经包含了#include这有什么具体原因吗?(或者这个功能可以很容易地手动完成吗?) 最佳答案 您需要链接Ws2_32.lib参见theMSDNdocumentationforntohl,上面写着“库:Ws2_32.lib”。 关于c++-C函数**ntohl**给出链接器错误(未

c++ - WinSock closesocket() 调用在某些计算机上需要一秒钟

这个调用应该在很短的时间后返回,但在某些机器上它莫名其妙地花费了接近1秒的时间。有没有人看到这个问题。我正在使用环回地址,因此网络应该不在画面中。 最佳答案 问题可能出在窗口套接字实现的某个地方。从操作系统的角度来看,调用closesocket(或CloseHandle)等同于释放驱动程序的“设备”对象。大多数情况下,驱动程序会立即(同步)处理此请求,并在必要时中止所有(潜在的)未完成的I/O。然而,“愚蠢”的驱动程序可能会阻止您,直到某事完成。这就是我要做的:尝试终止您的程序(通过任务管理器)。终止它需要时间吗?(如果是这样-似乎

windows - 如何在 Windows XP 中监视 UDP 缓冲区

我正在尝试优化基于UDP的大型系统中的通信。通过优化,我的意思是尽量减少数据包的丢失。(是的,我知道UDP的固有局限性,不建议使用其他协议(protocol))我们有几个.exe,每个都有几个线程,并使用setsockoptwithSO_SNDBUF&SO_RCVBUFtoincreasetobufers.我们经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?.特别是在接收端,我想看看是否有任何端口收到的消息由于缺少缓冲区而被丢弃。请建议如何做到这一点,(用户或内核模式下的Windbg,特殊程序,自知之明)编辑:@EdChu

windows - Winsock Kernel的 "WskSendTo"函数在Win7 SP1上导致 "DRIVER_IRQL_NOT_LESS_OR_EQUAL"BSOD

我正在开发一个名为Npcap的Windows数据包捕获软件。并且它需要发送基于Windows内核的环回原始IP套接字。但是WskSocket->Dispatch->WskSendTo总是导致DRIVER_IRQL_NOT_LESS_OR_EQUALWin7SP1上的蓝屏。奇怪的是,我的代码不会在Win8、Win10等其他系统上触发此BSoD。它只发生在Win7。所以我什至怀疑这是Windows本身的错误还是只是我的错误?谢谢!重现步骤为:安装Npcap0.07r17使用默认选项安装Nmap7.20Beta5(不要安装随附的Npcap)在CMD中,运行nmap-v-O-6localhos

c - 如何多播(发送)到第一个网卡?

我最近发现,如果我有一个拨号连接(这是用于信息亭)和一个局域网连接,当拨号连接建立时(通过互联网访问),我的多播sendto将默认为拨号而不是我的LANNIC。这使得多播发送到拨号连接,而不是发送到我有多个多播订阅者的LAN。我知道我需要使用IP_MULTICAST_IF来设置我的多播套接字上的接口(interface)。问题是如何枚举接口(interface)以及如何在setsockopt中使用IP_MULTICAST_IF?在WindowsXPEmbedded信息亭上,始终只有一个本地连接NIC。我如何获得此接口(interface)并将其IP地址(这是IP_MULTICAST_I

c++ - winsock:使用 localhost (127.0.0.1) 时连接失败并出现错误 10049

我写了一个类封装了一些winsock函数来模拟一个简单的TCP套接字来满足我的需要...当我尝试运行一个简单的“连接并发送数据到服务器”测试时,“客户端”调用连接失败,错误代码为10049(WSAEADDRNOTAVAIL)connectfunctiononMSDN我正在做的是(下面的代码):服务器:创建服务器套接字->将其绑定(bind)到端口12345将套接字置于监听模式调用接受客户端创建一个socket->绑定(bind)到一个随机端口调用连接:连接到本地主机,端口12345=>如上所述,连接调用失败并出现错误10049这是包括“服务器”在内的主要功能:HANDLEhThread

windows - 关于Winsock Kernel Buffer和Nagle算法的疑问

阅读时this文章,我有疑问。我了解到,在传输小数据时,默认情况下会启用Nagle算法以合并小数据包。这导致在传输之前缓存一些数据。我相信Winsock内核缓冲区是缓存发生的地方。如果我错了,请纠正我。这是否意味着如果使用SO_SNDBUF选项将Winsock内核缓冲区设置为零,Nagle算法是否会被禁用?如果不是那么WINSOCK在哪里缓存小数据? 最佳答案 您引用的知识库文章以这种方式给出了您的答案...Tooptimizeperformanceattheapplicationlayer,Winsockcopiesdatabuf

c# - 为什么 SocketAsyncEventArgs 的 Completed 回调经常在新创建的线程中执行,而不是使用有界线程池?

我有一个简单的客户端应用程序,它以低吞吐量从网络接收字节缓冲区。这是代码:privatestaticreadonlyHashSet_capturedThreadIds=newHashSet();privatestaticvoidRunClient(Socketsocket){vare=newSocketAsyncEventArgs();e.SetBuffer(newbyte[10000],0,10000);e.Completed+=SocketAsyncEventsArgsCompleted;Receive(socket,e);}privatestaticvoidReceive(Soc

c# - socket 的 Shutdown、Disconnect、Close 和 Dispose 到底是做什么的?

针对网络编程新手,很难找到关于这四种方法实际上的作用的简单解释。人们通常只是陈述他们认为在特定情况下关闭套接字的正确方法,而不是每个步骤背后发生的事情。遵循以人为本的哲学,你能解释一下Shutdown、Disconnect、Close和Dispose方法? 最佳答案 安answer在StackOverflow上让我觉得我终于有了一些理解。然后我去测试了一下,这是新手观点的总结。如果我错了,请纠正我,因为这是基于推理,而不是专业知识。关机Shutdown禁用Send和/或Receive方法,具体取决于提供的参数。它不会禁用底层协议(p