如何从端口读取文件的内容

时间:2017-01-24 07:39:08

标签: c# sockets network-programming listener

当有人打印文件时,我需要将文本数据用于程序。

我对TCP / IP客户端和监听器编程有基本的想法。 我已经可以在两台机器之间发送和接收txt文件了。 但是如果文件是docx,xl​​x,pdf或任何其他格式,如何接收文件内容?

我的要求是,

当有人打印文件时,我想将文件的内容(文本)用于其他程序。 如果有其他方法,请建议我。

提前感谢。

1 个答案:

答案 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

这种方法相当容易实现,如果要发送不同的文件类型,则不需要进行大的更改。它缺少一些验证器,但我认为您不需要此功能。

相关问题