问题标签 [windows-socket-api]
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.
c++ - WSACleanUp 导致异常
我的应用程序可以在串行和套接字连接之间切换,但不能同时打开。因此,当我尝试在 Socket 和 Serial 之间切换时,我删除了 Socket 连接。
基于套接字的对象使用一个名为 UsesWinsock 的私有类(在这里向Len Holgate大声喊叫,因为它基本上是他的代码(实际上是 RAII,但我从未将它应用于 WSA,直到我看到他这样做))。这只是调用 WSAStart 和 WSACleanUp。
当 WSACleanUp 被调用时,它会进入 NTDLL 和汇编程序。@err,hr 给我“传递给系统调用的数据区域太小”作为 HRESULT。
我尝试过移动代码:按照继承顺序移动类会导致破坏序列发生变化,并且实际上破坏了函数,因此它们是破坏序列中最后被调用的东西。都没有奏效。
我很确定我已经释放了所有分配的东西(只有 1 个套接字和几个事件)并且我被卡住了 - 这对我来说是一个相当重要的问题。
有什么建议么?
sockets - 10057 通过套接字 SendBuf 时 WSA 异常
客户:
服务器:
一件奇怪的事情是我必须从客户端发送两次登录+密码。
第一次发送(客户端),我在服务器上得到 onClientConnect 和 onAccept。我第二次发送(客户端),服务器执行代码,直到我标记的行。我得到一个 10057 WSA 异常。
为什么我会收到此错误?然而奇怪的是,如果我在我得到异常说“套接字未打开”的行之前打开服务器上的套接字,无论如何我都会得到它
windows - 是否可以判断 WSAStartup 是否已在进程中调用?
我已经开始编写一个使用套接字的 ActiveX 控件。
使用此控件的应用程序可能会也可能不会使用套接字。我的控件是否可以判断 WSAStartup 是否已被调用?
如果没有,请调用它。一个小测试表明多次调用 WSAStartup 是可以接受的。但是如果请求不同的 winsock 版本会发生什么?这会破坏应用程序的其他部分吗?
c++ - 从多个线程调用 WSAStartup() 会导致死锁吗?
我正在开发一个具有一个 TCP 服务器和多个 UDP 服务器/侦听器的应用程序。每个服务器都是一个单独的线程,与建立 TCP 连接的工作线程相同。我在每个线程中调用 WSAStartup()。
有时,调用 WSAStartup() 会挂起(对我来说这看起来像是一个死锁)。这是堆栈跟踪:
这种死锁发生在初始化 faze 期间。我看到 TCP 服务器已启动并建立了一个 TCP 连接,而仅启动了一个 UDP 服务器。堆栈跟踪来自应该启动其余 UDP 服务器的函数。我的猜测是,当我尝试初始化 UDP 服务器并调用 WSACStartup() 时,另一个线程正在处理另一个套接字操作,例如一个新的 TCP 连接,它也在调用 WSAStartup()?
我的问题是从多个线程调用 WSAStartup() 是否会导致这种死锁?我还检查了死锁之前调用的 WSACleanup() ,但事实并非如此。执行永远不会到达任何 WSACleanup()。
我知道只调用一次 WSAStartup 就足够了,但多次调用 WSAStartup() 应该不是问题(MSDN] 1):“如果需要获取 WSADATA 结构信息,应用程序可以多次调用 WSAStartup不止一次。” 因此,我想确定这个死锁是由 WSAStartup() 还是其他原因引起的。
c++ - 在我的代码中出现这个“10038 wsa socket”错误
我目前正在尝试实现一个类来创建和使用 TCP 连接。
(我在 C++ 中很新,所以我可能忘记了一些明显的东西,即使我一直在认真检查我的代码)
请注意,稍后我将实现第二个类来处理新连接,因此代码的某些部分是不完整/排列的,我希望在尝试理解它时不会打扰您。
这是我的问题:
服务器和客户端似乎都工作正常(我一直在检查我的监听、绑定、连接功能:没有错误)并且我显然能够与客户端发送数据但是当我尝试从服务器读取它时,我收到 WSA 错误 10038(这意味着我正在无效套接字上执行 recv())。我已经查了几天了,似乎找不到我的错误。除了代码中的测试外,我还使用“netstat -an -p tcp”检查连接状态,一切正常,但服务器无法接收数据。
注意:我使用的是 Visual Studio 6(是的,它很旧,但它是强制性的,所以......)和 winsock,而不是 winsock2。
如果我忘记了什么就问,我会尽量做到完整,但忘记某些东西并不是不可能的。
这是我的源代码,我试图将其简化,但我担心错误可能几乎无处不在:
CmTcpTransport.cpp
服务器主.cpp
客户端 main.cpp
以下是我同时运行两个电源时的控制台截图:
http://www.hostingpics.net/viewer.php?id=892752Consoles.jpg
感谢您的帮助,我意识到这需要阅读/处理很多内容,我感谢您的努力!
c++ - 绑定服务器套接字时出现 WSA 错误 10048
我从 msdn 网站上的简单服务器教程开始,以了解如何在客户端和服务器应用程序中使用套接字。
完成教程后,我开始将客户端和服务器代码调整为多线程程序,以制作 tchat 客户端和服务器。一切都很顺利,直到我遇到 WSA 错误 10048。我尝试为每个套接字使用不同的端口,但仍然没有解决错误。
这是我的服务器代码:
您可能会注意到不同的 couts,这些只是了解程序行为方式的 couts。
winapi - x86 WinAPI - 我不明白我的程序中如何引用某些函数参数
我编写了使用 WINAPI 库(特别是 WSA - Sockets)的 ac 程序,而不是编译源代码,而是要求编译器发出汇编源代码,而不是研究它在较低级别上的工作方式。
当遇到下面的这一行时,我注意到在程序集中没有引用我的 WINAPI 函数的第一个参数。WSAStartup 中的函数 MAKEWORD。
这里到底发生了什么?我的汇编代码中没有对 MAKEWORD 的引用,而是提示了 push 514。
注意: WSAStartup 函数启动进程对 Winsock DLL 的使用。
如果需要,我可以提供更多信息
c - C winsock函数发送所有消息数据
我正在编写一个c
使用 WSA 来处理多个客户端的服务器。该协议是我自己定义的,我遇到的问题是如何确保整个消息实际上是发送给客户端的。
我send
我的消息一次,然后我检查实际传输了多少字节。然后,如果不是,我send
再次使用,作为我现在要发送的数据的长度unsentBytes
(参见代码)。我的问题是,当我尝试发送未发送的额外字节时,我目前正在再次发送整个消息。我怎样才能只发送消息的剩余部分?
我知道我一次只能发送 1 个字符,并且当我到达消息末尾时停止在客户端接收,但我认为我也可以这样做,而且这样会更好。
这是使用正确的逻辑吗?
c - c语言中Windows和Linux套接字之间的连接
我正在使用socket
python 中的模块向我的树莓派发送命令以打开和关闭 GPIO 引脚。
我正在切换到 C,我将在我的 PC 上使用winsock.h
和创建服务器,并在树莓派上创建一个客户端。winsock2.h
sys/socket.h
是否可以在这两个不同的库之间建立连接?
我只想创建一个套接字bind
,send
和recv
。没有其他操作。
c - 调用 CygWin 函数同时仍默认调用本机 Windows 函数
我正在 Windows 中编写服务器。我想在服务器上接受多个连接,所以我想我可以使用 CygWin 的fork()
. 所以我添加了对 的调用fork()
,但遇到了错误。
我意识到这些错误是由于我想调用 Windows Socket API (WSA) 套接字函数(例如socket
、bind
、accept
)而引起的,但是当我使用 CygWin 编译时,它调用了它自己的套接字函数。
我的问题:如何使用 CygWinfork
但仍使用 WSA 的socket
、accept
和bind
?