我编写了一个非常简单的代码来设置一个“服务器”,它创建了一个命名管道,并等待客户端连接。一旦客户端打开管道,服务器就会发送它的数据(一个大约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
这里有一段代码应该是什么样子的(代码在其他地方,我现在无法访问它,但正如我前面所说的,它非常简单)
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);
发布于 2015-07-14 00:01:10
Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section.
为了克服这个问题,您必须设置服务器,以便以块的形式发送数据。
https://stackoverflow.com/questions/31395015
复制相似问题