我有一個客戶端應用程序和一個服務器。如何通過使用socket.FileSend方法發送的TCP接收文件
我想從一臺機器發送文件到另一臺機器,所以它似乎是套接字。 FileSend方法正是我正在尋找的方法。
但是由於沒有FileReceive方法,我應該在服務器端爲了接收文件而做什麼? (我的問題是因爲該文件將有一個可變大小,並會比任何緩衝區我可以創建GB順序...
我有一個客戶端應用程序和一個服務器。如何通過使用socket.FileSend方法發送的TCP接收文件
我想從一臺機器發送文件到另一臺機器,所以它似乎是套接字。 FileSend方法正是我正在尋找的方法。
但是由於沒有FileReceive方法,我應該在服務器端爲了接收文件而做什麼? (我的問題是因爲該文件將有一個可變大小,並會比任何緩衝區我可以創建GB順序...
在服務器端,您可以使用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發送二進制數據進行了優化。與依賴非常低級別的套接字相比,它是一個更加穩健的解決方案。你將不得不處理諸如文件名,可能是元數據等事情,......現有協議中已經考慮到的事情。
TKS,這個工作。我使用幾乎相同的代碼,但使用socket.receive而不是stream.read。 – RagnaRock 2011-12-28 14:41:51