2013-10-07 105 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