2013-10-07 76 views
0

我有一个简单的TCP客户端和侦听器代码。我想传递文件名以及文件数据。有没有什么办法可以将文件名与文件数据一起发送,并单独从网络流中读取文件名而不会破坏文件数据?从网络流读取数据

+0

原始TCP是我会为这样的要求的最后一件事。你想达到什么目的? –

+0

我只是想传输文件。一切工作正常,如果我先冲洗文件名,然后是实际data.But如果我尝试并发,说2在同一时间传输一些文件是任务数据 – user2160880

回答

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()); 
+0

这工作Weyland。非常感谢 – user2160880

+0

当我尝试在转移一些200 MB后在不同域之间传输时,我得到“现有连接被强制关闭”。防火墙全部禁用。我正在关闭所有的文件流,套接字等 – user2160880