Socket.EndSend Socket.EndSend Socket.EndSend Socket.EndSend Method

定義

保留中の非同期送信を終了します。Ends a pending asynchronous send.

オーバーロード

EndSend(IAsyncResult) EndSend(IAsyncResult) EndSend(IAsyncResult) EndSend(IAsyncResult)

保留中の非同期送信を終了します。Ends a pending asynchronous send.

EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError)

保留中の非同期送信を終了します。Ends a pending asynchronous send.

EndSend(IAsyncResult) EndSend(IAsyncResult) EndSend(IAsyncResult) EndSend(IAsyncResult)

保留中の非同期送信を終了します。Ends a pending asynchronous send.

public:
 int EndSend(IAsyncResult ^ result);
public int EndSend (IAsyncResult result);
member this.EndSend : IAsyncResult -> int
Public Function EndSend (result As IAsyncResult) As Integer

パラメーター

asyncResult
IAsyncResult IAsyncResult IAsyncResult IAsyncResult

この非同期操作の状態情報を格納する IAsyncResultAn IAsyncResult that stores state information for this asynchronous operation.

戻り値

正常に終了した場合は Socket に送信したバイト数。それ以外の場合は無効な Socket エラー。If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

例外

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) メソッドへの呼び出しで asyncResult が返されませんでした。asyncResult was not returned by a call to the BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

EndSend(IAsyncResult) が、非同期送信のために以前に呼び出されています。EndSend(IAsyncResult) was previously called for the asynchronous send.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

次のコード例では、保留中の非同期送信を終了します。The following code example ends a pending asynchronous send.

StateObject^ so = safe_cast<StateObject^>(ar->AsyncState);
Socket^ s = so->workSocket;

int send = s->EndSend( ar );

Console::WriteLine( "The size of the message sent was : {0}", send );

s->Close();
StateObject so = (StateObject) ar.AsyncState;
Socket s = so.workSocket;

int send = s.EndSend(ar);

      Console.WriteLine("The size of the message sent was :" + send.ToString());

s.Close();
Public Shared Sub Send_Callback(ar As IAsyncResult)

   Dim so As StateObject = CType(ar.AsyncState, StateObject)
   Dim s As Socket = so.workSocket
   
   Dim send As Integer = s.EndSend(ar)
   
   Console.WriteLine(("The size of the message sent was :" + send.ToString()))
   
   s.Close()
End Sub 'Send_Callback

注釈

EndSendBeginSend開始された非同期の送信操作を完了します。EndSend completes the asynchronous send operation started in BeginSend.

を呼び出すBeginSend前に、 AsyncCallbackデリゲートを実装するコールバックメソッドを作成する必要があります。Before calling BeginSend, you need to create a callback method that implements the AsyncCallback delegate. このコールバックメソッドは、別のスレッドで実行され、がBeginSend返された後にシステムによって呼び出されます。This callback method executes in a separate thread and is called by the system after BeginSend returns. コールバックメソッドは、パラメーター IAsyncResultとしてBeginSendメソッドによって返されたを受け入れる必要があります。The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

コールバックメソッド内で、 AsyncState IAsyncResultパラメーターのメソッドを呼び出して、送信元Socketを取得します。Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. を取得Socketした後、 EndSendメソッドを呼び出して送信操作を正常に完了し、送信されたバイト数を返すことができます。After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

コネクションレスプロトコルを使用しているEndSend場合、はデータグラムが送信されるまでブロックします。If you are using a connectionless protocol, EndSend will block until the datagram is sent. 接続指向プロトコルを使用している場合、 EndSendは一部のバッファーが送信されるまでブロックします。If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. からのEndSend戻り値が、バッファーが完全には送信されていBeginSendないことを示している場合は、メソッドを再度呼び出して、未送信データを保持するようにバッファーを変更します。If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

送信したデータがネットワークに直ちに表示される保証はありません。There is no guarantee that the data you send will appear on the network immediately. ネットワークの効率を向上させるために、基になるシステムは、大量の送信データが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. BeginSendメソッドが正常に終了するということは、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

注意

SocketException受け取った場合は、 SocketException.ErrorCodeプロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError) EndSend(IAsyncResult, SocketError)

保留中の非同期送信を終了します。Ends a pending asynchronous send.

public:
 int EndSend(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int EndSend (IAsyncResult asyncResult, out System.Net.Sockets.SocketError errorCode);
member this.EndSend : IAsyncResult * SocketError -> int
Public Function EndSend (asyncResult As IAsyncResult, ByRef errorCode As SocketError) As Integer

パラメーター

asyncResult
IAsyncResult IAsyncResult IAsyncResult IAsyncResult

この非同期操作の状態情報を格納する IAsyncResultAn IAsyncResult that stores state information for this asynchronous operation.

errorCode
SocketError SocketError SocketError SocketError

ソケット エラーを格納する SocketError オブジェクト。A SocketError object that stores the socket error.

戻り値

正常に終了した場合は Socket に送信したバイト数。それ以外の場合は無効な Socket エラー。If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

例外

asyncResultnull です。asyncResult is null.

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) メソッドへの呼び出しで asyncResult が返されませんでした。asyncResult was not returned by a call to the BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

EndSend(IAsyncResult) が、非同期送信のために以前に呼び出されています。EndSend(IAsyncResult) was previously called for the asynchronous send.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

注釈

EndSendBeginSend開始された非同期の送信操作を完了します。EndSend completes the asynchronous send operation started in BeginSend.

を呼び出すBeginSend前に、 AsyncCallbackデリゲートを実装するコールバックメソッドを作成する必要があります。Before calling BeginSend, you need to create a callback method that implements the AsyncCallback delegate. このコールバックメソッドは、別のスレッドで実行され、がBeginSend返された後にシステムによって呼び出されます。This callback method executes in a separate thread and is called by the system after BeginSend returns. コールバックメソッドは、パラメーター IAsyncResultとしてBeginSendメソッドによって返されたを受け入れる必要があります。The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

コールバックメソッド内で、 AsyncState IAsyncResultパラメーターのメソッドを呼び出して、送信元Socketを取得します。Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. を取得Socketした後、 EndSendメソッドを呼び出して送信操作を正常に完了し、送信されたバイト数を返すことができます。After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

コネクションレスプロトコルを使用しているEndSend場合、はデータグラムが送信されるまでブロックします。If you are using a connectionless protocol, EndSend will block until the datagram is sent. 接続指向プロトコルを使用している場合、 EndSendは一部のバッファーが送信されるまでブロックします。If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. からのEndSend戻り値が、バッファーが完全には送信されていBeginSendないことを示している場合は、メソッドを再度呼び出して、未送信データを保持するようにバッファーを変更します。If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

送信したデータがネットワークに直ちに表示される保証はありません。There is no guarantee that the data you send will appear on the network immediately. ネットワークの効率を向上させるために、基になるシステムは、大量の送信データが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. BeginSendメソッドが正常に終了するということは、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

注意

SocketException受け取った場合は、 SocketException.ErrorCodeプロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

適用対象