我在當有人打印文件,使用文本數據爲節目所需要的內容。如何讀取文件的從端口
我對TCP/IP客戶端和監聽程序的基本思路。 我已經可以在兩臺機器之間發送和接收txt文件。 但如何接收文件內容,如果文件是在DOCX,心連心,PDF或任何其他形式?
我的要求是,
我想,當有人打印文件使用一個文件的內容(文本)到另一個程序。 如果有其他方法可以做到,請給我建議。
提前致謝。
我在當有人打印文件,使用文本數據爲節目所需要的內容。如何讀取文件的從端口
我對TCP/IP客戶端和監聽程序的基本思路。 我已經可以在兩臺機器之間發送和接收txt文件。 但如何接收文件內容,如果文件是在DOCX,心連心,PDF或任何其他形式?
我的要求是,
我想,當有人打印文件使用一個文件的內容(文本)到另一個程序。 如果有其他方法可以做到,請給我建議。
提前致謝。
既然你還沒有發佈任何代碼,我會寫的「我的路」的代碼的一部分,但你應該看完這個有一點了解。
首先在兩端(客戶端和服務器),你應該適用統一的協議,該協議將描述您發送的數據。示例可以是:
[3字節 - ASCII擴展] [4字節 - 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());
}
}
這種方法相當容易實現,並且如果您想發送不同的文件類型,不需要大的更改。它缺少一些驗證器,但我認爲你不需要這個功能。
優秀... !!感謝您的解釋和示例.. –
另一個疑問是如何處理髮件人是否是打印文件到IP端口的打印機,並且接收者是從該端口捕獲的我的程序? –
@AmjadhNm然後這臺打印機應該有一些在文檔中指定的協議。每個通過網絡發送內容的設備都有自己的協議,必須在文檔中指定。 –
誰發送先發內容的大小,後插口,接收會知道有多少字節接收內容的插座。收到內容後,只需將字節保存爲任何文件格式即可。爲了使發送者更容易發送文件格式。如果你問如何檢測它是哪種格式,那麼你需要對內容進行模式匹配,看它是否與特定的文件格式相匹配。 – Bauss