次の方法で共有


Socket.EndSend メソッド

保留中の非同期送信を終了します。

Public Function EndSend( _
   ByVal asyncResult As IAsyncResult _) As Integer
[C#]
public int EndSend(IAsyncResultasyncResult);
[C++]
public: int EndSend(IAsyncResult* asyncResult);
[JScript]
public function EndSend(
   asyncResult : IAsyncResult) : int;

パラメータ

  • asyncResult
    この非同期操作の状態情報を格納する IAsyncResult

戻り値

正常に終了した場合は Socket に送信したバイト数。それ以外の場合は無効な Socket エラー。

例外

例外の種類 条件
ArgumentNullException asyncResult が null 参照 (Visual Basic では Nothing) です。
ArgumentException BeginSend メソッドへの呼び出しで asyncResult が返されませんでした。
InvalidOperationException EndSend が、非同期の読み取りのために以前に呼び出されています。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。

解説

EndSend は、 BeginSend で開始された非同期送信操作を完了します。

BeginSend を呼び出す前に、 AsyncCallback デリゲートを実装するコールバック メソッドを作成する必要があります。このコールバック メソッドは個別のスレッドで実行され、 BeginSend の終了時に呼び出されます。コールバック メソッドは、 BeginSend メソッドからパラメータとして返された IAsyncResult を受け取る必要があります。

コールバック メソッド内では、 IAsyncResult パラメータの AsyncState メソッドを呼び出して送信 Socket を取得します。 Socket を取得したら、 EndSend メソッドを呼び出して送信操作を正常に完了し、送信されたバイト数を返すことができます。コネクションレスのプロトコルを使用している場合、 EndSend はデータグラムが送信されるまでブロックします。コネクション指向のプロトコルを使用している場合、 EndSend は、要求されたバイト数が送信されるまでブロックします。送信したデータがすぐにネットワーク上に現れることは保証されません。ネットワークの効率を高めるため、基になっているシステムは、十分な量の送信データが収集されるまで送信を遅延することがあります。 BeginSend メソッドが正常に完了した場合は、基になるシステムにネットワーク送信のためにデータをバッファする余地があったことを示します。すべてのバイトをリモート ホストにすぐに送信することがアプリケーションの重要な要件の場合は、 SetSocketOption を使用して SocketOptionName.NoDelay を有効にすることができます。ネットワーク効率を高めるためのバッファの詳細については、MSDN の Nagle アルゴリズムを参照してください。

メモ    SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] 保留中の非同期送信を終了する例を次に示します。

 
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

[C#] 
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();

[C++] 
StateObject* so = __try_cast<StateObject*>(ar->AsyncState);
Socket* s = so->workSocket;

int send = s->EndSend(ar);

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

s->Close();

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | 非同期呼び出しの組み込み | BeginSend | AsyncCallback | AsyncState | SetSocketOption | NoDelay