问题标签 [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.

0 投票
2 回答
1517 浏览

c++ - WSACleanUp 导致异常

我的应用程序可以在串行和套接字连接之间切换,但不能同时打开。因此,当我尝试在 Socket 和 Serial 之间切换时,我删除了 Socket 连接。

基于套接字的对象使用一个名为 UsesWinsock 的私有类(在这里向Len Holgate大声喊叫,因为它基本上是他的代码(实际上是 RAII,但我从未将它应用于 WSA,直到我看到他这样做))。这只是调用 WSAStart 和 WSACleanUp。

当 WSACleanUp 被调用时,它会进入 NTDLL 和汇编程序。@err,hr 给我“传递给系统调用的数据区域太小”作为 HRESULT。

我尝试过移动代码:按照继承顺序移动类会导致破坏序列发生变化,并且实际上破坏了函数,因此它们是破坏序列中最后被调用的东西。都没有奏效。

我很确定我已经释放了所有分配的东西(只有 1 个套接字和几个事件)并且我被卡住了 - 这对我来说是一个相当重要的问题。

谷歌返回 4 个结果没有帮助解决我的问题

有什么建议么?

0 投票
1 回答
2375 浏览

sockets - 10057 通过套接字 SendBuf 时 WSA 异常

客户:

服务器:

一件奇怪的事情是我必须从客户端发送两次登录+密码。

第一次发送(客户端),我在服务器上得到 onClientConnect 和 onAccept。我第二次发送(客户端),服务器执行代码,直到我标记的行。我得到一个 10057 WSA 异常。

为什么我会收到此错误?然而奇怪的是,如果我在我得到异常说“套接字未打开”的行之前打开服务器上的套接字,无论如何我都会得到它

0 投票
2 回答
14681 浏览

windows - 是否可以判断 WSAStartup 是否已在进程中调用?

我已经开始编写一个使用套接字的 ActiveX 控件。

使用此控件的应用程序可能会也可能不会使用套接字。我的控件是否可以判断 WSAStartup 是否已被调用?

如果没有,请调用它。一个小测试表明多次调用 WSAStartup 是可以接受的。但是如果请求不同的 winsock 版本会发生什么?这会破坏应用程序的其他部分吗?

0 投票
4 回答
8255 浏览

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() 还是其他原因引起的。

0 投票
1 回答
3914 浏览

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

感谢您的帮助,我意识到这需要阅读/处理很多内容,我感谢您的努力!

0 投票
1 回答
10078 浏览

c++ - 绑定服务器套接字时出现 WSA 错误 10048

我从 msdn 网站上的简单服务器教程开始,以了解如何在客户端和服务器应用程序中使用套接字。

完成教程后,我开始将客户端和服务器代码调整为多线程程序,以制作 tchat 客户端和服务器。一切都很顺利,直到我遇到 WSA 错误 10048。我尝试为每个套接字使用不同的端口,但仍然没有解决错误。

这是我的服务器代码:

您可能会注意到不同的 couts,这些只是了解程序行为方式的 couts。

0 投票
3 回答
267 浏览

winapi - x86 WinAPI - 我不明白我的程序中如何引用某些函数参数

我编写了使用 WINAPI 库(特别是 WSA - Sockets)的 ac 程序,而不是编译源代码,而是要求编译器发出汇编源代码,而不是研究它在较低级别上的工作方式。

当遇到下面的这一行时,我注意到在程序集中没有引用我的 WINAPI 函数的第一个参数。WSAStartup 中的函数 MAKEWORD。

这里到底发生了什么?我的汇编代码中没有对 MAKEWORD 的引用,而是提示了 push 514。



注意: WSAStartup 函数启动进程对 Winsock DLL 的使用。

如果需要,我可以提供更多信息

0 投票
1 回答
601 浏览

c - C winsock函数发送所有消息数据

我正在编写一个c使用 WSA 来处理多个客户端的服务器。该协议是我自己定义的,我遇到的问题是如何确保整个消息实际上是发送给客户端的。

send我的消息一次,然后我检查实际传输了多少字节。然后,如果不是,我send再次使用,作为我现在要发送的数据的长度unsentBytes(参见代码)。我的问题是,当我尝试发送未发送的额外字节时,我目前正在再次发送整个消息。我怎样才能只发送消息的剩余部分?

我知道我一次只能发送 1 个字符,并且当我到达消息末尾时停止在客户端接收,但我认为我也可以这样做,而且这样会更好。

这是使用正确的逻辑吗?

0 投票
1 回答
2714 浏览

c - c语言中Windows和Linux套接字之间的连接

我正在使用socketpython 中的模块向我的树莓派发送命令以打开和关闭 GPIO 引脚。

我正在切换到 C,我将在我的 PC 上使用winsock.h和创建服务器,并在树莓派上创建一个客户端。winsock2.hsys/socket.h

是否可以在这两个不同的库之间建立连接?

我只想创建一个套接字bindsendrecv。没有其他操作。

0 投票
0 回答
73 浏览

c - 调用 CygWin 函数同时仍默认调用本机 Windows 函数

我正在 Windows 中编写服务器。我想在服务器上接受多个连接,所以我想我可以使用 CygWin 的fork(). 所以我添加了对 的调用fork(),但遇到了错误。

我意识到这些错误是由于我想调用 Windows Socket API (WSA) 套接字函数(例如socketbindaccept)而引起的,但是当我使用 CygWin 编译时,它调用了它自己的套接字函数。

我的问题:如何使用 CygWinfork但仍使用 WSA 的socketacceptbind