2016-10-23 5 views
0

Ich versuche, eine Datei vom TCP-Client zum Listener zu senden. Alles funktioniert, aber nachdem die Datei gesendet wurde, trennt der Client die Verbindung zum Server. Hier ist der Code, den ich zur Zeit für die Kunden mit:Trennen der Verbindung vom Server nach dem Senden der Datei

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) 
    { 
    } 
} 

und für den Server:

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); 
    }  
} 
+0

Die '} {' Klammern im Server-Code oberhalb von 'Fs.Close();' können für einen Start nicht korrekt sein. – Jim

Antwort

0

Aufruf NetworkStream.Close() oder NetworkStream.Dispose (am Ende der using Klausel) wird die Verbindung beenden.

Wenn Sie möchten, dass der Socket offen bleibt, verwenden Sie den Konstruktor NetworkStream(Socket, bool) und übergeben Sie false als zweiten Parameter.

+0

Wenn ich es nicht anrufe, kann ich die Datei nur verwenden, wenn ich die Programme beendet habe. –

+0

'Dispose();' wird automatisch aufgerufen, wenn die 'using' Anweisung verwendet wird – Jim

+0

@smirnoFzRPM Dispose the FileStream, behalte den NetworkStream. – airafr

Verwandte Themen