2016-10-23 14 views
0

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

サーバーコード内の '} {'}は 'Fs.Close();'の上には始まりません。 – Jim

答えて

0

using句の終わりに)NetworkStream.Close()またはNetworkStream.Disposeを呼び出すには、接続を終了します。

ソケットを開いたままにしたい場合は、NetworkStream(Socket, bool)コンストラクタを使用し、2番目のパラメータとしてfalseを渡します。

+0

私はそれを呼びたくない場合、私はプログラムを終了しない限り、私はこのファイルを使用することができません。 –

+0

'using'ステートメントを使用すると' Dispose(); 'が自動的に呼び出されます – Jim

+0

@smirnoFzRPM FileStreamを廃棄し、NetworkStreamを保持します。 – airafr

関連する問題