C#의 Windows에서 명명 된 파이프에 이상한 문제가 발생했습니다.Windows 명명 된 파이프가 네트워크를 통해 작동하지 않습니까?
클라이언트 :
NamedPipeClientStream pipeStream = new NamedPipeClientStream("default-PC","mypipe");
pipeStream.Connect();
BinaryWriter sw = new BinaryWriter(pipeStream);
sw.Write((byte[]) data);
서버 : - "."
NamedPipeServerStream pipeStream = new NamedPipeServerStream("mypipe");
byte[] dataAll = null;
pipeStream.WaitForConnection();
dataAll = new BinaryReader(pipeStream).ReadBytes(1024 * 1000 * 512);
내가 사용하는 경우 NamedPipeClientStream의 생성자에서 서버 이름으로 모든 것이 올바르게 작동합니다. 즉, 서버가 dataAll 객체를 채 웁니다.
지금 이상한 일이다 다음 데이터가 서버에서 읽을 수 없습니다 위의 코드와 같이처럼 다른 한편으로는 NamedPipeClientStream에 컴퓨터 ("기본-PC")의 네트워크 이름을 넣어 경우 그 서버 코드의 ReadBytes가 인 경우 빈 배열을 반환합니다.
두 개의 다른 컴퓨터에서 서버와 클라이언트를 실행하고 있지만 두 컴퓨터가 동일한 컴퓨터에서 실행되고 있음을 이해할 수 있습니다. 유일한 차이점은 NamedPipeClientStream 의 "server name"매개 변수가 "인지 여부입니다." 또는 실제 네트워크 이름 (또는 심지어 localhost).
아이디어가 있으십니까?
@ user357320 : 일반적으로 이는 사실이 아닙니다. 64 비트 Vista 머신에서 코드는 "." 와은 최소 50MB 이상의 데이터 크기를 나타냅니다. 데이터 크기가 500MB 인 경우 내 서비스 프로세스가 OutOfMemoryException과 충돌하고 "." 및 . –
코드를 Win7 x64 시스템에서 실행했습니다. 아마 구현은 다르지만, 어떤 경우 든 데이터가 64k 이상을 보내려고 시도했을 때 절대 도착하지 않았습니다. 적어도 기본 설정은 있습니다. – Karlth