当有人打印文件时,我需要将文本数据用于程序。
我对TCP / IP客户端和监听器编程有基本的想法。 我已经可以在两台机器之间发送和接收txt文件了。 但是如果文件是docx,xlx,pdf或任何其他格式,如何接收文件内容?
我的要求是,
当有人打印文件时,我想将文件的内容(文本)用于其他程序。 如果有其他方法,请建议我。
提前感谢。
答案 0 :(得分:0)
由于你还没有发布任何代码,我会以“我的方式”编写代码部分,但阅读完之后你应该有一点了解。
首先在两端(客户端和服务器)上应该应用统一协议,该协议将描述您要发送的数据。例子可能是:
[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
“重定向”到{{1 }}。这看起来像是:
networkStream
这种方法相当容易实现,如果要发送不同的文件类型,则不需要进行大的更改。它缺少一些验证器,但我认为您不需要此功能。