问题标签 [mailslot]

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 投票
1 回答
288 浏览

c++ - MailSlot 的进程同步

我正在尝试在 windows 上的两个进程之间进行进程间通信,从高层次的角度来看,我想同步这两个进程,假设有两个进程,进程 1 进程 2,

进程1是32位应用程序,进程2是64位应用程序,进程1正在运行,有时它正在调用进程2,进程2短期运行并自行关闭,进程2需要从进程1读取一些数据时它被打开了。

对于这种情况,我认为 MailSlot 可能是一个不错的选择,为了通过邮槽进行通信,进程 2 必须创建一个邮槽,然后进程 1 应该将邮件发送到这个邮槽,然后进程 2 应该读取邮槽,我的问题是如何同步这两个进程,以便在打开进程 2 时创建一个邮槽,然后触发进程 1 发送邮件并切换到等待状态,然后进程 1 将邮件发送到进程 2,然后进程 2 切换到运行状态并阅读邮件。

我怎样才能实现这样的场景?

0 投票
1 回答
1864 浏览

c - 尝试从邮槽读取时 C Readfile 错误 87

我正在尝试设置一个可以写入和读取的邮槽。

但是当调用 ReadFile 时,我得到错误 87。我尝试了 MSDN 的不同方法,但仍然得到错误 87。

我已经在我的代码中删除了很多错误处理,以便稍微缩短它。

这是我从主要做的电话。

这是我的代码的缩短版本。

0 投票
1 回答
318 浏览

winapi - 对邮槽理解的困惑

此快照来自Windows 系统编程(第 4 版)

我对邮槽有几个疑问,

  1. 为什么邮槽称为单向?虽然可以有多个客户端/服务器
  2. 为什么邮槽的作者被称为客户端,而读者是服务器
  3. 如果没有读者,为什么打开会失败?是不是有可能我会写,没有服务器会读,或者它可能会在一段时间后读?

我努力在谷歌上搜索,但没有得到确切的答案。

在此处输入图像描述

0 投票
1 回答
875 浏览

winapi - 使用 Delphi 写入远程计算机上的邮槽

我已经阅读了我能找到的关于邮槽的所有内容,但仍然存在写入已由另一台计算机上的邮槽服务器打开以供读取的邮槽的问题。

我对同一台计算机上的邮槽没有问题。例如,如果我尝试像这样写入本地计算机上的邮槽:

CreateFile如果邮槽服务器程序没有创建邮槽,将失败并显示文件不存在错误代码。

但是,如果我将这样\\MYSERVER\mailslot\testslot的内容作为邮槽名称传递,它总是返回一个有效的文件句柄。即使计算机名无效,它仍然返回一个文件句柄,然后WriteFile也成功。

如果计算机名称不正确或该计算机上的邮槽服务器没有创建邮槽,我希望CreateFile失败,但这似乎不是这种情况,只有在写入本地计算机上的邮槽时才会出现这种情况.

有人可以启发我吗?

0 投票
1 回答
6898 浏览

c - 表达式:(L“字符串不是以空结尾的”&&0)

我正在摆弄邮槽,现在遇到了问题。每当我尝试运行时,我都会在标题中收到错误消息,但我不知道应该如何修复它。我想要做的是“修复”邮槽的完整路径,但它似乎不像 strcat_s-part。

Imgur链接到错误

编辑:将 strlen 更改为 sizeof 只是将错误更改为“缓冲区大小太小”。

0 投票
1 回答
307 浏览

c++ - WinMain 参数 -> 邮槽 -> 文件 -> 编码?

我遇到了以下问题:应用程序每秒调用一个带有一些参数的 C++ 程序来从该应用程序中提取数据。C++ 程序是一个WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)实现不向用户显示控制台窗口的功能。这个“第一个程序”检查数据,然后将其写入一个 Mailslot,由我的“第二个程序”(只是一个普通的int main()C++)托管。这已经像上面写的那样工作了,但是当我尝试读取邮槽的内容时,编码似乎不同,因为我的参数不可读并且字符串的长度不同。

这两个程序都在其属性中使用 Unicode。我尝试使用LPWSTR(对于 Unicode)和LPCSTR(对于 ANSI)以及相应的函数...W...A但我没有让它工作。下面我写了我的 2 个程序的“LPCSTR 版本”。

我的第一个程序如下所示:

在我的第二个程序中是这样的:

processMessage()然后给出与提交给我的第一个程序不同的参数字符串。它看起来很奇怪,不可读......

我的问题有解决方案吗?我的错在哪里?

编辑:我编辑了我的整个问题,包括源代码,以显示我的最新版本。

0 投票
1 回答
725 浏览

delphi - 邮槽永远阻塞

我决定为 IPC 使用邮槽。在 Windows 8 上一切正常。但是在 Windows Xp 上,我收到了很好的第一条消息,但是对 ReadFile 的调用被卡住了。

这是我的测试代码:

在 Windows 8 上,我继续从客户端应用程序接收消息,但在 Windows xp 上,对 ReadFile 的调用会永远等待消息。我尝试重新打开客户端应用程序但没有成功。

我做错了什么?

0 投票
1 回答
102 浏览

c - 为什么整数类型是颠倒发送的?

我正在制作一个服务器程序,一个客户端已经发送了各种数据,如字符串、整数。

当客户端程序向我发送字符串时,我会按常规顺序收到。

例如,

一位客户给我发了“你好”,我收到了你好\0

然而,一个客户给我发了一个整数,比如我收到的 12345 是颠倒的。

例如)

客户想给我发送 12345(整数类型)他或她发送了 '30''39''\0' 我收到了 '57''48''\0' ('57' 是 '0x39' 和 ' 48' 是 '0x30' 的十进制)

我发现该值是颠倒发送的,我认为这是因为网络字节顺序。但是,我没有使用网络,我有客户端和服务器程序。换句话说,我给自己发送了数据,而我的电脑没有连接到互联网。

我使用 c 语言中的邮件槽与客户进行通信。为什么整数类型被颠倒发送?

0 投票
3 回答
1746 浏览

windows-10 - 在 2018 年 5 月 Windows 10 功能更新 1803 之后,邮槽上的 CreateFile 失败并出现错误 53 ERROR_BAD_NETPATH

CreateFile("\\mycomputer\mailslot\this_fails",...) 等命令失败,最后一个错误 = 53 ERROR_BAD_NETPATH

如果与任何有效或不存在的计算机名称(包括运行测试的同一台计算机)一起使用,则会失败。在这工作的计算机上,即使引用的计算机不存在或没有使用该名称创建的邮槽,它也会成功并返回邮槽句柄。请注意,如果使用不存在的计算机名称或邮槽,则句柄上的后续 WriteFiles 将失败,但 CreateFile 会成功。

但是,如果 Mailslot 引用是显式本地的,则上面的 CreateFile 将成功:“\\.\mailslot\always_works”

在安装 2018-05 累积更新之前,这适用于以前的所有 Windows 版本。特别是 KB4103721(Windows 10 家庭版)似乎是罪魁祸首。[编辑:如下面的答案所述,实际上是功能更新版本 1803 导致了此问题。]

测试客户端:(使用无参数或“.”但使用任何计算机名失败)。基于 msdn示例

语法:testclient [服务器计算机名]

测试服务器:(读取显示发送的消息)请注意,可能会收到重复的消息,因为 Mailslot 消息是通过所有可能的协议传输的。基于 msdn示例

读取消息的测试服务器和发送消息的测试客户端可以在同一台计算机上运行在不同的cmd shell中,也可以在不同的计算机上运行。当它失败时,它会立即失败,并且似乎是尝试解析网络路径名的问题。在同一台计算机上,\\ThisComputer\share 等文件共享可以在同一台计算机或不同的计算机上正常工作。

NetBIOS 通过 TCP/IP 为正在使用的网络适配器启用。网络适​​配器被指定为专用。防火墙被禁用以进行测试。文件和打印机共享已启用。计算机在同一个工作组中。计算机名称解析有效,即使使用 IP 地址(甚至是 127.0.0.1)也会失败。

0 投票
0 回答
21 浏览

android - Android上的邮槽接口

Android 设备可以写入 Windows 上的邮槽服务器吗?实现它的步骤是什么?我已经搜索过,但没有找到有关此主题的信息。