Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接收传入流时要使用的字节[]大小是多少_C#_Sockets - Fatal编程技术网

C# 接收传入流时要使用的字节[]大小是多少

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

我正在使用socket/TcpClient向服务器发送一个文件,如下所示

        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;
  }