首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网络命名管道

网络命名管道
EN

Stack Overflow用户
提问于 2015-07-13 23:12:01
回答 1查看 769关注 0票数 0

我编写了一个非常简单的代码来设置一个“服务器”,它创建了一个命名管道,并等待客户端连接。一旦客户端打开管道,服务器就会发送它的数据(一个大约10 of的块),客户机应该读取它并关闭连接。

现在真正的问题是:当管道使用本地名称(.\pipe\xxx)时,它确实没有任何问题地发送所有数据,但是如果我更改到网络名称的路径(\计算机\管道\xxx),它会改变行为,客户端只能读取大约65000字节,但是即使我循环它也不能完成读操作(我认为它在65k块中中断,因为我使用的是网络名称,甚至在本地也是如此)。ReadFile读取65k块并返回TRUE,如果我再次在管道中强制ReadFile,它将读取0字节。

我用来创建管道的标志是PIPE_ACCESS_DUPLEX、FILE_FLAG_WRITE_THROUGH、PIPE_TYPE_BYTE、PIPE_READMODE_BYTE、PIPE_WAIT、PIPE_ACCEPT_REMOTE_CLIENTS

这里有一段代码应该是什么样子的(代码在其他地方,我现在无法访问它,但正如我前面所说的,它非常简单)

代码语言:javascript
运行
复制
lPipe := CreateFileA('\\.\pipe\test', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
ReadFile(lPipe, lMemoryStream.Memory^, 1024*1024*15, lBytesRead, nil);
CloseHandle(lPipe);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 00:01:10

来自用于WriteFileEx的MSDN文档

代码语言:javascript
运行
复制
Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section.

为了克服这个问题,您必须设置服务器,以便以块的形式发送数据。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31395015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档