2013-02-21 27 views
0

我一直在爲此工作了兩天,我無法弄清楚。 我想通過TCP傳輸文件(服務器發送,客戶端接收)。NetworkStream接收端的文件名

我面臨的問題是我想實現一種方式讓接收方知道文件的文件名是什麼。 工作代碼我迄今

public void SendFile(string path, string IP) 
    { 
     TcpClient client = new TcpClient(); 
     client.Connect(IP, 1095); 

     using (NetworkStream networkStream = client.GetStream()) 
     using (FileStream fileStream = File.OpenRead(path)) 
     { 
      ASCIIEncoding asci = new ASCIIEncoding(); 
      byte[] b = asci.GetBytes(path); 
      networkStream.Write(b, 0, b.Length); 
      networkStream.Flush(); 
      fileStream.CopyTo(networkStream); 
     } 
     client.Close(); 
    } 


    private void ListenForFile() 
    { 
     TcpListener listener = new TcpListener(IPAddress.Any, 1095); 
     listener.Start(); 
     using (TcpClient incoming = listener.AcceptTcpClient()) 
     using (NetworkStream networkStream = incoming.GetStream()) 
     using (FileStream fileStream = File.OpenWrite(@pathName + @"\something.extension")) 
     { 
      networkStream.CopyTo(fileStream); 
     } 
     listener.Stop(); 
    } 

回答

0

NetworkStream有流字節的緩衝區沒有文件的概念,它只是一個類。你將不得不做的是拿出某種形式的協議來將文件名發送到客戶端。

您可以通過先傳輸文件名和文件名的長度,然後傳輸文件大小,然後傳輸實際的文件內容。

客戶端可以讀取文件名長度,讀入文件名,讀取文件大小然後讀入文件數據。

+0

因此,基本上發送一條消息之前,將只包含文件名的流? – 2013-02-21 22:45:28

+0

是的。你應該首先包含文件名的長度,否則你將不知道文件名停止的地方,並且實際的文件開始,並且我會傳輸數據的大小以及好的措施。 – Lloyd 2013-02-21 22:46:54

+0

感謝您的快速響應! 我編輯了我的代碼,首先發送一個帶有文件名的tcp消息。 – 2013-02-22 00:05:49

相關問題