问题标签 [winsock]

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 回答
843 浏览

winapi - 无法绑定到 XP sp3 上的低端口号 (80)

我的套接字类中有这段代码:

“Error()”方法只是调用 WSAGetLastError 并将错误及其描述传递给应用程序。无论如何,它在我的机器(xp sp2)上运行良好,但在我的朋友 xp sp3 机器上却失败了。特别是绑定调用失败并且 WSAGetLastError 返回“2”,这甚至不是有效的套接字错误代码。传入的“端口”值是 80,我正在运行一个简单的 HTTP 服务器作为服务的 UI。我不完全确定为什么要检查 >= 0,但它可能与我也使用此代码的非 Windows 平台有关。在任何情况下,根据 MSDN,绑定错误的返回码是 SOCKET_ERROR,它是 -1,因此检查应该没问题。

我错过了一些简单的事情吗?

更新:我们刚刚尝试了一个不同的端口号“8888”,一切都按预期工作。所以看起来低端口号是问题所在。在我们运行我的服务之前,该端口上没有任何主动监听,所以我认为这是 SP3 中的某种新权限问题,它会停止监听端口 < 1024 的进程,除非它们具有某些权限,类似于 linux/unix 方式的做事。无论如何,我仍然希望能够解决它。

0 投票
2 回答
2548 浏览

windows-services - 如何知道哪个本地应用程序连接到我的套接字(Windows)

我有一个绑定到某个 TCP 端口的 Windows 服务,该端口用于我的应用程序之间的 IPC。

是否有编程(WinAPI/WinSocket 等)方法来知道哪个应用程序连接到我的端口?

即在我的 Windows 服务中,我想获得连接到我的端口的进程的 PID。

0 投票
6 回答
2380 浏览

c++ - Winsock 2 可移植性

我即将在 C++ 中开发一些与套接字相关的东西,并希望该软件从一开始就尽可能地在 Windows 和 Linux 之间移植(让它以后移植很棘手。)

我查看了不同的库,有一个来自alhem.net的 C++ 库,当然还有 boost::asio。boost::asio 看起来很有前途,但对于这么小的应用程序来说将是一个非常大的依赖项。

自己写这些东西是否值得,还是我应该只使用图书馆?如果我自己做,主要的陷阱是什么?

0 投票
2 回答
654 浏览

c++ - Winsock 不受控制地产生了几个持久的线程

我正在设计一个WSAEventSelect用于异步操作的网络框架。由于每个线程最多 64 个事件的限制,我为每 64 个套接字生成一个线程,除了一件事外,一切都按预期工作:

在连接和断开连接期间,Winsock 会不断生成线程,这些线程不会消失。

在框架的当前设计下,当只有几个套接字处于活动状态时,应该运行两个线程。正如预期的那样,总共有两个线程在运行。但是,当我连接几个套接字(1-5 个套接字)时,会产生另外 3 个线程,这些线程会一直持续到我关闭应用程序。此外,当我在任何套接字上失去连接时,会产生另外 2 个线程(也会持续到关闭)。总共有 7 个线程,其中 5 个我不知道它们的用途。

如果 Winsock 需要它们进行连接或其他什么然后消失了,那很好。但令我困扰的是,它们一直持续到我关闭我的应用程序。

有没有人可以对此有所了解?可能是避免这些线程或在没有连接处于活动状态时强制它们关闭的解决方案?

(应用程序是用 Win32 和 Winsock 2.2 用 C++ 编写的)


来自 Process Explorer 的信息:

预期线程:
MyApp.exe!WinMainCRTStartup
MyApp.exe!Netfw::NetworkThread::ThreadProc

意外线程:
ntdll.dll!RtlpUnWaitCriticalSection+0x2dc
mswsock.dll+0x7426
ntdll.dll!RtlGetCurrentPeb+0x155
ntdll.dll!RtlGetCurrentPeb+0x155
ntdll.dll!RtlGetCurrentPeb+0x155

所有意外线程都有调用堆栈,其中调用了诸如ntkrnlpa.exe!IoSetCompletionRoutineEx+0x46e这可能意味着它是通知机制的一部分的函数。

0 投票
3 回答
15785 浏览

c++ - Winsock 错误代码 10014

看来我经常返回“失败”。以下是我在“返回失败”处的断点被击中时各种变量的值:

url: "/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32 %5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c"

hst:“bgfx.net”

主机:空

错误:10014

这里发生了什么?更重要的是,我该如何解决它?

注意: SendRequestToServer 的原始参数是“bgfx.net/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73% 74%65%6d%33%32%5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c"

在此之前已调用 WSAStartup。

0 投票
2 回答
5370 浏览

php - 从 Delphi 运行外部 php 脚本

好的 - 这是我之前关于使用 php 脚本发送电子邮件的问题的延续。我现在使用PEAR发送邮件。我使用的php脚本如下(单独执行成功):PHPEMail.php

我现在需要从 Delphi 执行这个脚本 (PHPEMail.php),传递一些变量,使用 winsock。我要使用这段代码 - 到目前为止还没有成功:

我很确定故障出在发送到 Web 服务器的“TheData”中。PHP脚本只是没有被触发。有人知道出了什么问题吗?

(注意:我想用winsock,我不想要第三方组件。完整的代码,它是一个服务器,重约12ko,注定要嵌入一些硬件中)。

见最后的代码。


因为我在服务器日志上看不到 POST,所以我对我的代码做了一些改进(加上一些错误消息)。现在服务器的日志显示发送的数据包的一些跟踪......也就是说,通常的 id 和时间加上字母“P”......可能是单词 'POST' 的第一个字母(发送的数据)。因此,我必须调查“Send()”命令。(我在德尔福 2009 年)。我没有从 winsock 或发送命令中得到任何错误。

等待 POST 的 pearemail.php 脚本:

0 投票
1 回答
355 浏览

vb.net - 温索克程序

hai先生如何通过互联网使用win sock控制与远程系统通信。这是 possiple 在 vb.net 2005 中给出示例或任何想法

0 投票
2 回答
3498 浏览

winsock - gethostbyaddr() 出现错误 11001

我正在编写简单的程序来在智能设备之间进行通信,并且在调用 gethostbyaddr() 时收到 11001。两台设备都显示它们连接到同一个网络,但从 msdn 文档 11001 错误是找不到主机。没有这样的主机是已知的。有人有什么建议吗,谢谢 我的代码如下。

 

0 投票
3 回答
3408 浏览

c++ - WSACleanup 和 atExit

可以通过 atExit 函数注册 WSACleanup 吗?我们有几个应用程序可以在代码中的不同点终止,因此我们希望避免将 WSACleanup 放在代码中的任何地方。目前我们通过 DllMain 调用 WSAStartup / WSACleanup,因为我们有一个所有这些应用程序都使用的 dll。但是,Microsoft 严格建议不要通过 DllMain 使用 WSAStartup / WSACleanup,因为这会导致死锁。我们可以将 WSAStarup 移出 DllMain,并在所有应用程序访问 Windows 套接字库之前在代码中的某一点调用它。而且,一旦我们调用 WSAStartup,我们就想使用 atExit 函数来注册对 WSACleanup 的调用。有没有人有这种方法的经验?谢谢!

0 投票
1 回答
7550 浏览

ssl - 如何将 OpenSSL 与 WinSock 一起使用?

我已经在网上搜索并没有找到任何关于这个的...

有没有人有使用 WinSock 和 OpenSSL 的简单代码示例?我正在寻找一个简单的 Visual C++ 2005 或更高版本的代码示例,它创建并打开一个 winsock 连接并使用 OpenSSL 应用必要的 SSL 设置并适当地释放所有资源。