2017-01-24 1 views
0

누군가가 파일을 인쇄 할 때 프로그램에 텍스트 데이터를 사용해야 할 필요가 있습니다.포트에서 파일 내용을 읽는 방법

TCP/IP 클라이언트 및 수신기 프로그래밍에 대한 기본 개념이 있습니다. 이미 두 컴퓨터간에 txt 파일을 보내고받을 수 있습니다. 그러나 파일이 docx, xlx, pdf 또는 다른 형식으로 된 경우 파일 내용을받는 방법? 내 요구 사항은

,

나는 누군가가 파일을 인쇄 할 때 다른 프로그램에서 파일의 내용 (텍스트)을 사용하고 싶었다. 다른 방법이 있다면 나에게 제안 해주세요.

감사합니다.

+0

보내는 소켓은 먼저 콘텐츠의 크기를 보내야합니다. 수신 한 소켓은 콘텐츠를 수신 할 바이트 수를 알 수 있습니다. 내용을받은 후에는 파일 형식에 관계없이 바이트를 저장하면됩니다. 송신자는 파일 형식을 쉽게 보낼 수 있습니다. 형식을 찾는 방법을 묻는다면 내용에 패턴 일치를 수행하여 특정 파일 형식과 일치하는지 확인해야합니다. – Bauss

답변

0

코드를 게시하지 않았으므로 "내 방식"으로 코드 부분을 작성 하겠지만이 부분을 읽은 후에는 약간의 이해가 있어야합니다.

먼저 양쪽 (클라이언트 및 서버)에서 보내는 데이터를 설명하는 통합 프로토콜을 적용해야합니다. 예 수 :

[3Bytes - ASCII 확장] [4 바이트가 - lengthOfTheFile] [XBytes이 - 된 FileContents]

이 그런 다음 보낸 당신이 먼저 읽기 수단 (3) 프로토콜에 따라 데이터를 수신 할 수 있습니다 바이트가 어떤 포맷 파일을 가지고 있는지를 결정하면, 당신은 기본적으로 얼마나 큰 파일이 incomming인지를 알려주는 4 바이트를 읽는다. 마지막으로 내용을 읽고 파일에 직접 써야합니다. 예를 보낸 사람은 다음과 같이 수 :

보낸 사람 부분에
byte[] extensionBuffer = new byte[3]; 
if(3 != networkStream.Read(extensionBuffer, 0, 3)) 
    return; 

string extension = Encoding.ASCII.GetString(extensionBuffer); 
byte[] lengthBuffer = new byte[sizeof(int)]; 
if(sizeof(int) != networkStream.Read(lengthBuffer, 0, 3)) 
    return; 

int length = BitConverter.ToInt32(lengthBuffer, 0); 
int recv = 0; 
using (FileStream stream = File.Create(nameOfTheFile + "." + extension)) 
{ 
    byte @byte = 0x00; 
    while((@byte = (byte)networkStream.ReadByte()) != 0x00) 
    { 
     stream.WriteByte(@byte); 
     recv++; 
    } 
    stream.Flush(); 
} 

그런 다음 파일 스트림을 열고 파일 확장자를 읽고 스트림의 길이를 얻을 후 클라이언트로 스트림 길이를 보내고 각 바이트를 "리디렉션"할 수 있습니다 FileStream에서 networkStream으로

FileInfo meFile = //.. get the file 
byte[] extBytes = Encoding.ASCII.GetBytes(meFile.Extension); 
using(FileStream stream = meFile.OpenRead()) 
{ 
    networkStream.Write(extBytes, 0, extBytes.Length); 
    networkStream.Write(BitConverter.GetBytes(stream.BaseStream.Length)); 
    byte @byte = 0x00; 
    while (stream.Position < stream.BaseStream.Length) 
    { 
     networkStream.WriteByte((byte)stream.ReadByte()); 
    } 
} 

이 방식은 구현하기가 매우 용이하고 서로 다른 파일 형식을 보내려면 큰 변화를 필요로하지 않는다 :이 같은 것을 볼 수 있습니다. 일부 유효성 검사기가 부족하지만이 기능이 필요하지 않다고 생각합니다.

+0

우수 ... !! 설명 및 예를 들어 주셔서 감사합니다. –

+0

발신자가 IP 포트로 파일을 인쇄하는 프린터이고 수신자가 해당 포트에서 걸리는 프로그램 인 경우 어떻게 처리해야합니까? –

+0

@AmjadhNm 그런 다음이 프린터에는 설명서에 지정된 일부 프로토콜이 있어야합니다. 네트워크를 통해 무언가를 보내는 모든 장치는 설명서에 명시되어있는 자체 프로토콜을 가지고 있습니다. –

관련 문제