次の方法で共有


Socket.BeginSend メソッド

接続されている Socket にデータを非同期的に送信します。

Public Function BeginSend( _
   ByVal buffer() As Byte, _   ByVal offset As Integer, _   ByVal size As Integer, _   ByVal socketFlags As SocketFlags, _   ByVal callback As AsyncCallback, _   ByVal state As Object _) As IAsyncResult
[C#]
public IAsyncResult BeginSend(byte[] buffer,intoffset,intsize,SocketFlagssocketFlags,AsyncCallbackcallback,objectstate);
[C++]
public: IAsyncResult* BeginSend(unsigned charbuffer __gc[],intoffset,intsize,SocketFlagssocketFlags,AsyncCallback* callback,Object* state);
[JScript]
public function BeginSend(
   buffer : Byte[],offset : int,size : int,socketFlags : SocketFlags,callback : AsyncCallback,state : Object) : IAsyncResult;

パラメータ

  • buffer
    送信するデータを格納する Byte 型の配列。
  • offset
    送信を開始する、 buffer パラメータ内の、インデックス番号が 0 から始まる位置。
  • size
    送信するバイト数。
  • socketFlags
    SocketFlags 値のビットごとの組み合わせ。
  • callback
    AsyncCallback デリゲート。
  • state
    要求の状態情報を格納するオブジェクト。

戻り値

非同期の送信を参照する IAsyncResult

例外

例外の種類 条件
ArgumentNullException buffer が null 参照 (Visual Basic では Nothing) です。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。以下の解説を参照してください。
ArgumentOutOfRangeException offset が 0 未満です。

または

offsetbuffer の長さより小さい値です。

または

size が 0 未満です。

または

size が、 buffer の長さから offset パラメータの値を引いた値を超えています。

ObjectDisposedException Socket は閉じられています。

解説

BeginSend メソッドは、 Connect メソッド、 BeginConnect メソッド、 Accept メソッド、および BeginAccept メソッドで確立されたリモート ホストへの非同期送信操作を開始します。最初に AcceptBeginAcceptConnect 、または BeginConnect を呼び出さないと、 BeginSend は例外をスローします。 BeginSend メソッドを呼び出すと、個別の実行スレッド内でデータを送信できます。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginSend メソッドに渡すことができます。これを行うには、最低限、通信に使用される接続済みのまたは既定の Socketstate パラメータに含まれている必要があります。他の情報がコールバックに必要な場合は、小さなクラスまたは構造体を作成して Socket などの必要な情報を保持します。このクラスのインスタンスは、 state パラメータを使用して BeginSend メソッドに渡します。

コールバック メソッドは EndSend メソッドを実装する必要があります。アプリケーションが BeginSend を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、 EndSend は、 Socket が要求バイト数を送信するか例外をスローするまでブロックします。 BeginSend メソッドを呼び出してから元のスレッドをブロックする場合は、 WaitHandle.WaitOne メソッドを使用します。元のスレッドの実行を継続させるには、コールバック メソッドで Set を呼び出します。コールバック メソッドの記述に関する追加情報については、「 Callback のサンプル 」を参照してください。

BeginSend は、コネクション指向のプロトコルを想定していますが、 Connect メソッドまたは BeginConnect メソッドを呼び出して既定のリモート ホストを確立しておけば、コネクションレスのプロトコルでも使用できます。コネクションレスのプロトコルを使用していて、複数の異なるホストにデータを送信する予定がある場合は、 BeginSendTo を使用してください。 BeginSendTo は、 Connect で既定のリモート ホストを確立した後でも使用できます。また、 BeginSend の呼び出しの前に、 Connect または BeginConnect を呼び出すことによって、既定のリモート ホストを変更できます。コネクションレスのプロトコルを使用している場合は、バッファのサイズが、基になるサービス プロバイダの最大パケット サイズを超えないことを確認する必要もあります。最大サイズを超えている場合、データグラムは送信されず、 BeginSendSocketException をスローします。

DontRoute フラグを socketflags パラメータとして指定した場合、送信しようとしているデータはルーティングされません。 OutOfBand フラグを socketflags パラメータとして指定した場合、帯域外データだけが送信されます。

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

使用例

[Visual Basic, C#, C++] リモート ホストへの非同期的なデータ送信を開始する例を次に示します。

 
allDone.Set()
Dim s As Socket = CType(ar.AsyncState, Socket)
s.EndConnect(ar)
Dim so2 As New StateObject()
so2.workSocket = s
Dim buff As Byte() = Encoding.ASCII.GetBytes("This is a test")
s.BeginSend(buff, 0, buff.Length, 0, New AsyncCallback(AddressOf Async_Send_Receive.Send_Callback), so2)
   End Sub 'Connect_Callback
   

[C#] 
allDone.Set();
Socket s = (Socket) ar.AsyncState;
s.EndConnect(ar);
StateObject so2 = new StateObject();
so2.workSocket = s;
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
s.BeginSend(buff, 0, buff.Length,0,
                      new AsyncCallback(Async_Send_Receive.Send_Callback), so2);    

[C++] 
allDone->Set();
Socket* s = __try_cast<Socket*>(ar->AsyncState);
s->EndConnect(ar);
StateObject* so2 = new StateObject();
so2->workSocket = s;
Byte buff[] = Encoding::ASCII->GetBytes(S"This is a test");
s->BeginSend(buff, 0, buff->Length, SocketFlags::None,
    new AsyncCallback(0, &Async_Send_Receive::Send_Callback), so2);    

[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 名前空間 | 非同期呼び出しの組み込み | Callback のサンプル | Connect | AsyncCallback | EndSend