【发布时间】:2014-04-15 10:59:01
【问题描述】:
我有一个关于 Stream 类的 CopyTo() 方法的问题:
https://docs.microsoft.com/en-us/dotnet/api/system.io.stream.copyto
这种方法适用于我尝试过的大约 15kb 的小文件,但任何更高的文件(我用 2mbs、4mbs 等进行了测试)并且它只是挂在 CopyTo() 方法上。实在想不通为什么。
代码示例:
服务器的句柄客户端:
public void HandleClient(object c)
{
string path = "some path";
using (TcpClient client = (TcpClient)c)
{
using (NetworkStream netStream = client.GetStream())
{
using (FileStream fileStream = new FileStream(path, FileMode.Create))
{
netStream.CopyTo(fileStream);
}
}
}
}
客户端发送:
public void Send()
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("some address"), 12345);
string path = "some path";
using (TcpClient client = new TcpClient(remoteEndPoint))
{
using (NetworkStream netStream = client.GetStream())
{
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
fileStream.CopyTo(netStream);
}
}
}
}
附:当我研究我的网络编程方式时,我经常发现有人建议其他人切换到 WCF 来完成这类任务,因为显然 WCF 使一切变得容易得多。你们有什么建议,您能否为 WCF 菜鸟提供一些链接,这些链接对 LAN 文件共享应用程序建模很有用,因为这就是我的目标?
【问题讨论】:
-
WCF 确实非常强大,但不幸的是,很难正确配置它,有很多相互关联的节流设置可能会妨碍您(一些客户端,一些服务器端),尤其是在处理您想要完成的大量数据传输时。祖先技术(.Net Remoting)不是很灵活,有很多硬编码设置。 WCF 走向相反的方向,一切都是超级可配置的。即使有这个困难,它肯定比设计自己的通信协议恕我直言更好。
-
考虑使用 HTTP 或 FTP。图书馆是可用的。很容易做对。
-
感谢您的回复。关于 FTP,这对于文件共享应用程序来说是一个可行的解决方案吗?目标是能够将文件发送到局域网中的任何电脑。
-
无需打开套接字,只需打开 HTTP 端点。原理相同,细节更简单。
标签: c# file sockets tcpclient tcplistener