Socket.EndSendFile(IAsyncResult) Metoda

Definicja

Kończy oczekujące asynchroniczne wysyłanie pliku.

public:
 void EndSendFile(IAsyncResult ^ asyncResult);
public void EndSendFile (IAsyncResult asyncResult);
member this.EndSendFile : IAsyncResult -> unit
Public Sub EndSendFile (asyncResult As IAsyncResult)

Parametry

asyncResult
IAsyncResult

IAsyncResult Obiekt, który przechowuje informacje o stanie dla tej operacji asynchronicznej.

Wyjątki

Windows NT jest wymagany dla tej metody.

Obiekt Socket został zamknięty.

asyncResult jest pusta.

asyncResult element nie został zwrócony przez wywołanie BeginSendFile(String, AsyncCallback, Object) metody .

Wystąpił błąd podczas próby uzyskania dostępu do gniazda. Zobacz sekcję uwagi poniżej.

Przykłady

Poniższy przykład kodu tworzy i łączy gniazdo dla komunikacji asynchronicznej i rozpoczyna wysyłanie pliku "text.txt" asynchronicznie do hosta zdalnego. Wywołanie delegata EndSendFile wywołania zwrotnego w celu ukończenia transmisji.

   static void AsynchronousFileSend()
   {
      // Send a file to a remote device.
      // Establish the remote endpoint for the socket.
      IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
      IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
      IPEndPoint^ remoteEP = gcnew IPEndPoint( ipAddress,11000 );

      // Create a TCP/IP socket.
      Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

      // Connect to the remote endpoint.
      client->BeginConnect( remoteEP, gcnew AsyncCallback( ConnectCallback ), client );

      // Wait for connect.
      connectDone->WaitOne();

      // There is a text file test.txt in the root directory.
      String^ fileName = "C:\\test.txt";

      // Send file fileName to the remote device.
      Console::WriteLine( fileName );
      client->BeginSendFile( fileName, gcnew AsyncCallback( FileSendCallback ), client );

      // Release the socket.
      client->Shutdown( SocketShutdown::Both );
      client->Close();
   }

private:
   static void FileSendCallback( IAsyncResult^ ar )
   {
      // Retrieve the socket from the state object.
      Socket^ client = dynamic_cast<Socket^>(ar->AsyncState);

      // Complete sending the data to the remote device.
      client->EndSendFile( ar );
      sendDone->Set();
   }
public static void AsynchronousFileSend()
{
    // Send a file to a remote device.

    // Establish the remote endpoint for the socket.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

    // Create a TCP/IP socket.
    Socket client = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    // Connect to the remote endpoint.
    client.BeginConnect(remoteEP,
        new AsyncCallback(ConnectCallback), client);

    // Wait for connect.
    connectDone.WaitOne();

    // There is a text file test.txt in the root directory.
    string fileName = "C:\\test.txt";

    // Send file fileName to the remote device.
    Console.WriteLine(fileName);
    client.BeginSendFile(fileName, new AsyncCallback(FileSendCallback), client);

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.Close();
}

private static void FileSendCallback(IAsyncResult ar)
{
    // Retrieve the socket from the state object.
    Socket client = (Socket) ar.AsyncState;

    // Complete sending the data to the remote device.
    client.EndSendFile(ar);
    sendDone.Set();
}

Uwagi

EndSendFile kończy operację wysyłania asynchronicznego uruchomioną w pliku BeginSendFile.

Przed wywołaniem BeginSendFilemetody należy utworzyć metodę wywołania zwrotnego, która implementuje delegata AsyncCallback . Ta metoda wywołania zwrotnego jest wykonywana w osobnym wątku i jest wywoływana przez system po BeginSendFile powrocie. Metoda wywołania zwrotnego musi akceptować IAsyncResult obiekt zwrócony przez BeginSendFile metodę jako parametr.

W metodzie wywołania zwrotnego wywołaj AsyncState metodę parametru IAsyncResult , aby uzyskać element wysyłający Socket. Po uzyskaniu metody można wywołać metodę SocketEndSendFile , aby pomyślnie ukończyć operację wysyłania.

Jeśli używasz protokołu bez połączenia, EndSendFile blokuje do momentu wysłania datagramu. Jeśli używasz protokołu zorientowanego na połączenie, EndSendFile blokuje do momentu wysłania całego pliku. Nie ma gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie BeginSendFile metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy