问题标签 [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# - 如何在 Socket 类中使用数据接收事件?
我编写了一个简单的客户端,它使用 dotnet 中的 TcpClient 进行通信。为了等待来自服务器的数据消息,我使用了一个在套接字上Read()
使用阻塞调用的线程。Read()
当我收到一些东西时,我必须生成各种事件。这些事件发生在工作线程中,因此您无法直接从中更新 UI。Invoke()
可以使用,但对于最终开发人员来说很困难,因为我的 SDK 将被可能根本不使用 UI 或使用 Presentation Framework 的用户使用。演示框架有不同的处理方式。Invoke()
在我们作为 Microstation Addin 的测试应用程序上,目前需要大量时间。Microstation 是单线程应用程序,在其线程上调用调用并不好,因为它总是忙于绘图,其他东西消息处理时间太长。
我希望我的事件在与 UI 相同的线程中生成,因此用户不必通过Dispatcher
or Invoke
。
现在我想知道当数据到达时如何通过套接字通知我?是否有内置回调。我喜欢 winsock 风格的接收事件,而不使用单独的读取线程。我也不想使用窗口计时器来轮询数据。
我在函数中找到了帮助说IOControlCode.AsyncIO
的标志IOControl()
在等待接收数据时启用通知。该值等于 Winsock 2
FIOASYNC
常数。
我找不到任何关于如何使用它来获取通知的示例。如果我在 MFC/Winsock 中是正确的,我们必须创建一个size(0,0)
仅用于侦听数据接收事件或其他套接字事件的窗口。但我不知道如何在 dotnet 应用程序中做到这一点。
c - recv() 直到收到 NUL 字节?
我试图一次从服务器接收一个数据包,因为数据包速度太快,并且每个数据包的大小未定义,调用 recv() 并读取字节数将读取第一个数据包,也许是其中的一部分第二个数据包。由于每个数据包都是 NULL 终止的,我想逐字节读取,直到收到 NULL 字节。
我认为这种方法根本没有效率。如果服务器发送了 1024 个字节,recv()
将被调用 1024 次。
在收到 NULL char 之前是否有任何其他方法来 recv() ,或者比我正在使用的更好的方法?
编辑:我在从服务器发送的数据前面添加了数据包大小,但是现在,如果一个错误的数据包,甚至有时无缘无故,数据包就会被弄乱并且没有收到正确的数据。这是我的代码
c - windows下如何获取ip地址
我已经有了一个“socketfd”,我想知道如何使用它来检索本地 IP 地址。在linux下,我可以做这样的事情(不完全正确):
但是,在 Windows 上,我怎样才能实现相同的目标?(不使用 MFC)非常感谢。
编辑:也许我的主机有多个 IP 地址,我想要一个与“socketfd”“连接”的地址。
c++ - 使用 TCP 连接从 HTTP 服务器获取数据,很少有垃圾数据
我正在使用 Winsocks 2.2 和 Visual Studio 2010 编写 C++ 网络游戏,并决定使用我的网络服务器存储游戏的活动服务器列表是一个好主意。当服务器启动时,它会在我的网络服务器上注册自己,退出注销;当有人访问服务器列表时,服务器本身将尝试清理列表(这种行为我仍在努力设计为不涉及服务器上的太多工作;但我认为当游戏服务器尝试添加自身时,我的php 文件将使用 fsockopen 来检测它是否可以从外部网络实际访问服务器,如果不能,则不会添加服务器,直到它可以正确设置端口转发或以某种方式解决问题)。
好的,所以经过一些研究,我想出了如何使用 TCP 连接从服务器获取一些东西,从格式化 HTTP 服务器的专用消息。这是我所拥有的:
我期待返回格式正确的数据,但我并没有完全得到。这是我得到的:
这是带有所有标头信息的一些垃圾的另一个输出:
这就是我的输出应该看起来的样子,我偶尔会得到这个,但不是所有时候:
我认为这并不重要,但这是我在 Web 服务器上的 PHP 代码:
这是一些涉及接收字符串的代码(是的,目前它有点简单,我意识到我可以使用 cstring 函数来查找两个新行,所以我不必进行字符串复制,我'我只是想坚持使用字符串来让事情变得更容易):
那么,你们中有人知道这些垃圾数据来自哪里吗?
编辑:查看正确的标头信息后,带有垃圾的那个具有“Transfer-Encoding:chunked”并且没有“content-length”。...到底是怎么回事?
c++ - Socket传输数据但收不到响应
我正在尝试在 C++ 中实现 UpNP,我在 google 上找到了一些资源,但没有一个有效。我发现这个工作(http://www.codeproject.com/KB/IP/upnplib.aspx)但它适用于.NET,所以我决定嗅探网络以查看代码在做什么,然后做同样的事情插座。
以下是结果(全尺寸:http: //i.stack.imgur.com/eLoHK.jpg):
这表明我的数据包看起来不错,一切似乎都一样,除了源地址之外的一切,我不知道如何控制(我的代码和finder.net.exe都在测试在连接到同一网络的同一台计算机上)。
这是我的代码:
我删除了所有 WSAGetLastError() 错误检查以使代码更易于阅读,一切正常,直到 recvfrom 总是返回 -1 并且 strerror(WSAGetLastError()) 打印“未知错误”。
我希望有人能引导我朝着正确的方向前进,我最近两天一直在努力完成这项工作。
delphi - StrPLCopy 上的 PChar 无效指针操作
我使用 WinSock 2 编写了一些 TCP 服务器,并且我有捕获 FD_READ 事件的程序。在此过程中,我需要解析收到的消息。代码在这里:
在调试时,我有一个“访问冲突......地址写入......”就行了
请帮助我解决这个问题并了解它发生的原因。蒂亚!
delphi - GetMem 用于一个 PChar 变量更改其他 PChar 变量的内容
所以,我有以下问题。我有 2 个 PChar 变量。我首先分配内存,执行一些操作,为第二个变量分配内存 - 在这一步中,第一个变量包含错误值(我在调试时看到它)。这是代码:
在线上
当我寻找变量 HEADER 值时——我看到了一些惊人的东西——与我在程序开始时看到的不同。我该如何解决?
synchronization - 关于 I/O 中的同步访问 Works in I/O Completion
假设有 4 个 I/O worker 在使用对应于处理器数量的 I/O Completion Port,它们之间是否需要对客户端上下文进行同步访问?
这里的客户端上下文是指通过 I/O CompletionKey 传递的内容。问题可能是,如果工作人员 A 已将 I/O 发布到带有上下文的 I/O 完成队列,但现在正在更改上下文。被唤醒处理 I/O 的 Worker B 正在同时读取上下文。会发生什么?
winsock - 确定使用 Winsock2 接收的数据包
有没有办法确定在 Winsock 中使用 recv() 时收到了多少数据包?我正在寻找在客户端实施的解决方案,对服务器端没有特殊要求(我无法控制)
c++ - Winsocks 2 异步问题
我正在尝试在异步模式下使用 winsock2。我能够将消息从客户端发送到服务器,但不能从服务器发送到客户端。当我在客户端调用 recv 时,缓冲区中没有收到任何内容。
这是我的客户代码
这是服务器代码
//发送部分
//接收部分
请帮我