C# 如何从端口读取文件内容
当有人打印文件时,我需要在程序中使用文本数据 我对TCP/IP客户端和侦听器编程有基本的了解。 我已经可以在两台机器之间发送和接收txt文件了。 但是,如果文件是docx、xlx、pdf或任何其他格式,如何接收文件内容呢 我的要求是, 当有人打印文件时,我想将文件的内容(文本)输入到另一个程序中。 如果有其他方法,请告诉我C# 如何从端口读取文件内容,c#,sockets,network-programming,listener,C#,Sockets,Network Programming,Listener,当有人打印文件时,我需要在程序中使用文本数据 我对TCP/IP客户端和侦听器编程有基本的了解。 我已经可以在两台机器之间发送和接收txt文件了。 但是,如果文件是docx、xlx、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
中的每个字节“重定向”到网络流中。这可能看起来像:
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());
}
}
FileInfo meFile=/。。获取文件
byte[]extBytes=Encoding.ASCII.GetBytes(meFile.Extension);
使用(FileStream stream=meFile.OpenRead())
{
networkStream.Write(extBytes,0,extBytes.Length);
networkStream.Write(BitConverter.GetBytes(stream.BaseStream.Length));
字节@字节=0x00;
while(stream.Position
这种方法相当容易实现,如果您想发送不同的文件类型,则不需要进行重大更改。它缺少一些验证器,但我认为您不需要此功能。发送内容的套接字应首先发送内容的大小,然后接收内容的套接字将知道接收内容的字节数。接收到内容后,只需将字节以任何文件格式保存即可。为了方便起见,发件人还可以发送文件格式。如果您询问如何检测它是哪种格式,那么您需要对内容进行模式匹配,以查看它是否匹配特定的文件格式。另一个疑问是,如果发送者是一台将文件打印到IP端口的打印机,如何处理,接收器是我的程序,它从那个端口捕获?@AmjadhNm那么这个打印机应该有文档中指定的协议。每个通过网络发送信息的设备都有自己的协议,必须在文档中指定。