我有一个简单的TCP客户端和监听器代码。我想传递文件名和文件数据。有没有办法发送文件名和文件数据,并从网络流中单独读取文件名而不破坏文件数据?
答案 0 :(得分:0)
这是一种发送不应该被破坏的文件名和数据的方法。如果使用序列化,则不必单独手动编写和读取文件名和内容,只需发送它并将其作为单个对象读取,并让框架处理序列化和反序列化各个属性。
[SerializableAttribute]
class Data
{
public string FileName;
public byte[] FileData;
}
客户端
string filePath = @"c:\temp\myfile.txt";
TcpClient client = new TcpClient();
client.Connect("localhost", 8888);
Data data = new Data();
data.FileName = Path.GetFileName(filePath);
data.FileData = File.ReadAllBytes(filePath);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize( client.GetStream(), data);
client.Close();
服务器
TcpListener listener = new TcpListener(IPAddress.Loopback, 8888);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
BinaryFormatter formatter = new BinaryFormatter();
Data data = (Data)formatter.Deserialize(client.GetStream());