Отключение от сервера после отправки файла

Я пытаюсь отправить файл с 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);
    }      
}

person smirnoFz RPM    schedule 23.10.2016    source источник
comment
скобки }{ в коде сервера выше Fs.Close(); не могут быть правильными для начала.   -  person Jim    schedule 23.10.2016


Ответы (1)


Вызов NetworkStream.Close() или NetworkStream.Dispose (в конце предложения using) разорвет соединение.

Если вы хотите оставить сокет открытым, используйте NetworkStream (Socket, bool) и передать false в качестве второго параметра.

person airafr    schedule 23.10.2016
comment
Если я не позвоню, я не смогу использовать файл, пока не выйду из программ. - person smirnoFz RPM; 23.10.2016
comment
Dispose(); будет вызываться автоматически при использовании оператора using - person Jim; 23.10.2016
comment
@smirnoFzRPM Удалите FileStream, сохраните NetworkStream. - person airafr; 23.10.2016