C# 接收传入流时要使用的字节[]大小是多少
我正在使用socket/TcpClient向服务器发送一个文件,如下所示C# 接收传入流时要使用的字节[]大小是多少,c#,sockets,C#,Sockets,我正在使用socket/TcpClient向服务器发送一个文件,如下所示 NetworkStream nws = tcpClient.GetStream(); FileStream fs; fs = new FileStream(filename, FileMode.Open, FileAccess.Read); byte[] bytesToSend = new byte[fs.Length]; int numB
NetworkStream nws = tcpClient.GetStream();
FileStream fs;
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] bytesToSend = new byte[fs.Length];
int numBytesRead = fs.Read(bytesToSend, 0, bytesToSend.Length);
nws.Write(bytesToSend, 0, numBytesRead);
在服务器sise上,我有一个问题
我应该使用什么字节[]大小来读取流
谢谢这取决于协议。我会把尺寸定为4k或
4096
。您应该一直阅读,直到read
返回0
这取决于协议。我会把尺寸定为4k或4096
。您应该一直读到read
返回0
您无法确定流的长度,您所能做的就是一直读到最后。您可以首先在流中发送长度,以便服务器知道期望值。但即使如此,通信错误也可能会截断发送的内容。您无法确定流的长度,您所能做的就是读取,直到到达末尾。您可以首先在流中发送长度,以便服务器知道期望值。但即使如此,通信错误也可能会截断发送的内容。建议的缓冲区大小是问题的主题
但是,这确实意味着您需要在一个循环中多次读取源流并写入目标流,直到到达源流的末尾。代码可能如下所示(最初基于类的示例代码)
在.NET4.0中,这样的代码不再是必需的。只需使用新方法。建议的缓冲区大小是需要考虑的问题 但是,这确实意味着您需要在一个循环中多次读取源流并写入目标流,直到到达源流的末尾。代码可能如下所示(最初基于类的示例代码)
在.NET4.0中,这样的代码不再是必需的。只需使用新方法。非常感谢您提供了这个宝贵的链接,它提供了非常需要的信息。我将采纳这些建议。再次感谢uThank u提供的宝贵链接,它提供了非常需要的信息。我将采纳这些建议。再一次,谢谢你
public static long CopyTo(Stream source, Stream target)
{
const int bufSize = 8192;
byte[] buf = new byte[bufSize];
long totalBytes = 0;
int bytesRead = 0;
while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
{
target.Write(buf, 0, bytesRead);
totalBytes += bytesRead;
}
return totalBytes;
}