【问题标题】:Disconnecting from the server after sending file发送文件后断开与服务器的连接
【发布时间】:2017-03-05 07:54:02
【问题描述】:

我正在尝试将文件从 TCP 客户端发送到侦听器。它一切正常,但在发送文件后,客户端与服务器断开连接。这是我目前用于客户端的代码:

public static void SendFile(FileInfo file)
{
    try
    {  
        long size = file.Length;

        using (NetworkStream ns = client.GetStream())
        {
            using (FileStream Fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
            {
                int num;
                byte[] buffer = new byte[Fs.Length];
                while ((num = Fs.Read(buffer, 0, buffer.Length)) != 0)
                {
                    ns.Write(buffer, 0, num);
                }
                Fs.Close();
                ns.Close();
            }
        }

        FileInfo p_c = new FileInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\destfile.bin");
        p_c.Delete();
    } catch(Exception ex)
    {
    }
}

对于服务器:

using (NetworkStream ns = new NetworkStream(current))
{
    using (FileStream Fs = new FileStream(full_path, FileMode.OpenOrCreate, FileAccess.Write))
    {        
        while ((RecBytes = ns.Read(RecData, 0, RecData.Length)) > 0)
        {
            Fs.Write(RecData, 0, RecBytes);
            totalrecbytes += RecBytes;
        }
        {
        Fs.Close();
        ns.Close();
        Console.WriteLine("File received. Path: {0}", full_path);
    }      
}

【问题讨论】:

  • 服务器代码中的 }{ 括号,上面的 Fs.Close(); 不能正确开始。

标签: c# tcp client listener sendfile


【解决方案1】:

调用NetworkStream.Close() 或NetworkStream.Dispose(在using 子句的末尾)将终止连接。

如果要保持套接字打开,请使用NetworkStream(Socket, bool) 构造函数,并将 false 作为第二个参数传递。

【讨论】:

  • 如果我不调用它,除非我退出程序,否则我将无法使用该文件。
  • Dispose();在使用using语句时会被自动调用
  • @smirnoFzRPM 处理 FileStream,保留 NetworkStream。
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2019-11-03
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多