2011-12-28 42 views
7

我有一個客戶端應用程序和一個服務器。如何通過使用socket.FileSend方法發送的TCP接收文件

我想從一臺機器發送文件到另一臺機器,所以它似乎是套接字。 FileSend方法正是我正在尋找的方法。

但是由於沒有FileReceive方法,我應該在服務器端爲了接收文件而做什麼? (我的問題是因爲該文件將有一個可變大小,並會比任何緩衝區我可以創建GB順序...

回答

8

在服務器端,您可以使用TcpListener和一旦客戶端連接讀取紛至沓來塊,並將其保存到一個文件:

class Program 
{ 
    static void Main() 
    { 
     var listener = new TcpListener(IPAddress.Loopback, 11000); 
     listener.Start(); 
     while (true) 
     { 
      using (var client = listener.AcceptTcpClient()) 
      using (var stream = client.GetStream()) 
      using (var output = File.Create("result.dat")) 
      { 
       Console.WriteLine("Client connected. Starting to receive the file"); 

       // read the file in chunks of 1KB 
       var buffer = new byte[1024]; 
       int bytesRead; 
       while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        output.Write(buffer, 0, bytesRead); 
       } 
      } 
     } 

    } 
} 

至於發送來講你可以看看在SendFile方法的文檔中提供的例子。

這就是說,你也可以看看更強大的解決方案,即使用WCF。有一些協議,如MTOM,專門針對通過HTTP發送二進制數據進行了優化。與依賴非常低級別的套接字相比,它是一個更加穩健的解決方案。你將不得不處理諸如文件名,可能是元數據等事情,......現有協議中已經考慮到的事情。

+0

TKS,這個工作。我使用幾乎相同的代碼,但使用socket.receive而不是stream.read。 – RagnaRock 2011-12-28 14:41:51

相關問題