问题标签 [winsockets]
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++ - 在 C++ 中使用 SSPI 实现安全连接 - 澄清一些术语
我必须编写一个应用程序,使用 Microsoft API 实现客户端和服务器之间的安全连接。谷歌给了我很多结果,我有一个大麻烦 - 需要有人在我的脑海里给我一些命令:
问题:
- 什么是 SSPI 接口?什么是 Schannel.dll 库?有什么不同?(我看到我可以包含“SSPI.h”、“Schannel.h”和“security32.h”——我真的需要哪个头文件?)
我怎样才能找到一个真正简单的示例来解释我如何创建安全套接字?
在开始之前,您是否有一些我必须知道的指导方针?
如果您能提供帮助,我将不胜感激。
tcp - 接受来自正好 2 个 IP 地址的 TCP 连接
我正在使用 Winsock 编写 TCP 服务器应用程序。连接到我的客户端(我没有来源,因此无法进行更改)的行为如下:如果它连接并且我关闭连接(因为它是不受欢迎的客户端),它将立即重新连接。因此,如果有一个客户想要连接到我但我不想与之交谈(即我称之为不受欢迎的客户),我会在我的 accept() 调用中发疯.
我想找到一种方法来防止我的 accept() 调用疯狂旋转。如果只有 1 个所需的客户端,我可以将我的侦听套接字绑定到该客户端的 IP 地址而不是 INADDR_ANY。但是,唉,有超过 1 个所需的客户。据我所知,当该组的大小大于 1 时,无法仅允许来自一组所需 IP 地址的连接。
我看过 WSAAccept。不幸的是,看起来这只会将疯狂的旋转转变为回调。
有没有办法拒绝不涉及 accept() 唤醒和返回的尝试连接(因此导致所有这些疯狂的旋转)?
c# - 自动重新连接异步套接字客户端
我正在使用 C# 中的 Windows 窗体应用程序。我正在使用以异步方式连接到服务器的套接字客户端。如果连接因任何原因断开,我希望套接字立即尝试重新连接到服务器。我的接收程序看起来像这样
当 NotifyClientStatusSubscribers(false) 被调用时,函数 StopClient 被执行:
现在我尝试通过调用以下函数重新连接:
当连接可用时,套接字重新连接,但几秒钟后,我得到以下未处理的异常:“在已连接的套接字上发出了连接请求。”
这怎么可能?
sockets - 套接字和多个 IP 地址
我的机器上有两个网卡,配置了两个独立的 IP 地址。两个 IP 地址都属于同一个网络。我是否正确地说,当我创建一个特定于这些 IP 地址之一的套接字时?
更新:
这是我的情况:
我有一个位于 192.168.0.10 的硬件设备。它通过 udp 与 (192.168.0.11, 50000) 和 (192.168.0.12, 50000) 通信。硬件设备通过两个端口执行此操作,如下所示:(192.168.0.10, 49000) 和 (192.168.0.10, 49001)。
我通过脚本创建端口 (192.168.0.11, 50000) 和 (192.168.0.12, 50000),以便记录和操作通信,然后将数据转发到两个能够与硬件通信的模拟器。
所以实际上,我的脚本是“中间人”,我在其中记录和破坏数据以测试硬件。
这是我的脚本的套接字接口:
这按预期工作,并且为每个通道记录了正确的数据。
但是,如果我进行两个简单的更改,它就会停止工作:
1)我将第二个模拟器的配置文件从60002改为50002,同时保持ip地址为192.168.0.12。
2) 在我的脚本中,我还将 IP2 的 60002 更改为 50002。
突然,来自第二个通道的数据到达了第一个模拟器。怎么会这样?.net 有一个IPAny,我想知道模拟器是否以某种方式使用它并忽略其配置文件中的 IP 地址。你认为这可能是这里的问题吗?
谢谢,
巴里
winsock - WinSock 错误 10061
我使用winsock 编写了一个简单的客户端/服务器应用程序。服务器和客户端通过本地主机上的 TCP 端口 76567(只是我选择的一个随机数)进行连接和通信。我在三台台式机上测试过,两台运行 XP,另一台运行 Win7,我还在四台笔记本电脑上测试过,三台运行 Win7,一台运行 XP。该应用程序在所有台式机和 XP 笔记本电脑上都可以正常工作,但在所有三台 Win7 笔记本电脑上,当客户端尝试连接到服务器时,我都会收到错误 10061!
我已经关闭了防火墙,但问题仍然存在,我还环顾四周,看看是什么导致了这个错误,看起来客户端正在尝试连接到非监听服务器。但是,服务器调用 listen() 成功返回!很奇怪,这个问题似乎只发生在 Win7 笔记本电脑上,有什么想法吗?
这是我的套接字初始化代码:
非常感谢 :)
c++ - Winsock - 将客户端重新连接到服务器基础知识 - TIME_WAIT
我设置了一个 TCP 服务器/客户端,它们以我通常想要的方式进行通信。
我现在要做的是添加允许客户端在连接丢失后自动重新连接到服务器的功能。我无法在网上找到有关如何执行此操作的完整信息。
详细信息:-我只有 1 台服务器,到目前为止它最多只能托管 1 个连接。- 当客户端或服务器断开连接时 - 两者都关闭(这样关闭服务器和客户端的套接字是否明智?)
理想情况下,我希望客户端每次都能够重新连接到服务器上的同一端口。我了解 TIME_WAIT 以及为什么它是必要的。除非我没有其他选择,否则我真的不想使用 SO_REUSEADDR。这个一般是怎么处理的?我是否应该在服务器端打开一个新端口,同时等待旧套接字完成 TIME_WAIT 并基本上在两个端口之间交替(这意味着客户端必须跟踪 2 个可能的端口)?
感谢您的建议!
visual-c++ - 发送操作的 Winsocket 超时
我在 vc++ 2008 中编写了一个 TCP Socket 应用程序。如果需要超过 x 秒,我希望“发送”操作超时。为此,我尝试使用
char *optValue = "5000";
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, optValue, sizeof(optValue));
它返回成功,但“发送”没有按预期运行。然后尝试使用
tv.tv_sec = 10;
tv.tv_usec = 0;
FD_SET(accept_socket, &write_mask);
select(socket, (fd_set *)0, &write_mask, (fd_set *)0, &tv);
仍然“发送”未按照设置的超时值运行。请检查这是正确的方法吗?
c++builder - c++ builder TClientWinSocket simbol 替换
我有以下问题。我必须通过 tcp/ip 向主机设备发送文本电报。电报应使用 0x1A (CTRL-Z) 字符终止。但是当我发送它时,主持人告诉我电报中有错误的符号。当我用 32 (0x20) 终止电报时,一切正常。我使用 WireShark 查看传输的数据,我看到当我发送 0x1A 时,它被 0x16 替换,当我发送 32 (0x20) 作为终止符时,它以某种方式被 0x1A 替换。
你能解释一下吗?
PS我正在使用c ++builder xe2在Windows 7上工作。
谢谢,弗拉基米尔
multithreading - winsock 应用程序和多线程 - 从另一个线程监听套接字事件
假设我们有一个使用winsock 来实现tcp 通信的应用程序。对于每个套接字,我们创建一个线程并在其上进行块接收。当数据到达时,我们想通知其他线程(监听线程)。
我想知道实现这一点的最佳方法是什么:
摆脱这种设计并使用非阻塞套接字,那么监听线程将不得不不断迭代并调用非阻塞接收,从而使其线程安全(套接字没有额外的线程)
使用异步过程调用来通知侦听线程——这又将不得不等待 apc 为它们排队。
实现一些线程安全的消息队列,每个套接字线程将向其发布消息,并且侦听器将再次检查它并从中提取数据。
另外,我阅读了有关 WSAAsyncSelect 的信息,但我看到它用于将消息发送到窗口。其他线程没有类似的东西吗?(好吧我猜apcs是......)
谢谢!
c - 接受呼叫不会阻塞第二次(或不止一次)?
我有以下代码,我不确定为什么它不能正常工作。
它是一个多线程 TCP 服务器,循环 accept() 调用并触发指定的
每次线程。
问题是接受有时不会阻塞,从而导致
当理论上没有连接时打开一个新线程的程序。
这就是循环 -
每个函数都有我自己的包装器。
AcceptConnection 具有以下代码 -
当我通过浏览器连接到服务器时出现问题,
例如 ,
在第一个线程完成后(我已经通过暂时休眠主线程 5 秒来确保这一点)
它清理一切并关闭客户端套接字,
虽然在第二次接受呼叫 - 它会以相同的方式返回
SOCKADDR 信息并导致一个额外的线程上去,
接收完全相同的数据,发送完全相同的数据。
并打印 2 次(有时甚至更多)次:
“服务器响应消息已发送。”
我无法弄清楚为什么会发生这种情况,希望你们能帮助我。
谢谢 !