簡體   English   中英

如何從端口讀取文件內容

[英]How to read the content of file from port

當有人打印文件時,我需要在程序中使用文本數據。

我對TCP / IP客戶端和偵聽器編程有基本的想法。 我已經可以在兩台機器之間發送和接收txt文件了。 但是,如果文件為docx,xl​​x,pdf或任何其他格式,如何接收文件內容?

我的要求是

當某人打印文件時,我想將文件的內容(文本)用於另一個程序。 如果有其他替代方法,請提出建議。

預先感謝。

由於您尚未發布任何代碼,因此我將以“我的方式”編寫代碼部分,但閱讀此書后應該有所了解。

首先,在兩端(客戶端和服務器),您都應該應用統一協議,該協議將描述您要發送的數據。 示例可能是:

[3Bytes-ASCII擴展名] [4Bytes-lengthOfTheFile] [XBytes-fileContents]

然后在發件人中,您可以根據協議接收數據,這意味着首先讀取3個字節來確定文件具有哪種格式,然后讀取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());
    }
}

這種方法很容易實現,如果要發送不同的文件類型,則不需要進行大的更改。 它缺少一些驗證器,但我認為您不需要此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM