Socket.SendToAsync(SocketAsyncEventArgs) Metódus

Definíció

Adatokat küld aszinkron módon egy adott távoli gazdagépnek.

public:
 bool SendToAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendToAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendToAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendToAsync (e As SocketAsyncEventArgs) As Boolean

Paraméterek

e
SocketAsyncEventArgs

Az SocketAsyncEventArgs aszinkron szoftvercsatorna-művelethez használni kívánt objektum.

Válaszok

true ha az I/O-művelet függőben van. A Completed paraméter eseménye a e művelet befejezésekor lesz előállítva.

false ha az I/O-művelet szinkron módon fejeződött be. Ebben az esetben a e paraméter eseménye nem lesz előállítva, Completed és a e paraméterként átadott objektum azonnal megvizsgálható, miután a metódushívás visszatér a művelet eredményének lekéréséhez.

Kivételek

A RemoteEndPoint null érték nem lehet.

A szoftvercsatorna-művelet már folyamatban volt a SocketAsyncEventArgs paraméterben e megadott objektummal.

A Socket le van zárva.

A megadott protokoll kapcsolatorientált, de még Socket nincs csatlakoztatva.

Megjegyzések

A SendToAsync metódus elindít egy aszinkron küldési műveletet a paraméter tulajdonságában SocketAsyncEventArgs.RemoteEndPoint megadott távoli gazdagépnek e . A metódus meghívásával SendToAsync külön végrehajtási szálon belül küldhet adatokat. Bár ez a módszer kapcsolat nélküli protokollokhoz készült, SendToAsync a kapcsolat nélküli és a kapcsolatorientált protokollokkal is működik.

Ha értesítést szeretne kapni a befejezésről, létre kell hoznia egy visszahívási módszert, amely implementálja az EventHandler<SocketAsyncEventArgs> delegáltját, és csatolja a visszahívást az SocketAsyncEventArgs.Completed eseményhez.

A metódus sikeres meghívásához a következő tulajdonságokra és eseményekre van szükség az System.Net.Sockets.SocketAsyncEventArgs objektumon:

A hívó a SocketAsyncEventArgs.UserToken metódus meghívása előtt bármilyen felhasználói állapotobjektumra beállíthatja a SendToAsync tulajdonságot, hogy az információk lekérthetők legyenek a visszahívási metódusban. Ha a visszahívásnak több információra van szüksége, mint egyetlen objektum, létrehozhat egy kis osztályt, amely tagként tárolja a többi szükséges állapotinformációt.

Ha kapcsolatorientált protokollt használ, először meg kell hívnia a Accept, AcceptAsync, BeginAccept, BeginConnect, Connectvagy ConnectAsync metódust. Ellenkező esetben SendToAsync dob egy SocketException. Kapcsolatorientált protokoll használatakor a SendToAsync metódus figyelmen kívül hagyja a SocketAsyncEventArgs.RemoteEndPoint tulajdonságot, és adatokat küld a System.Net.EndPointAccept, AcceptAsync, , BeginAcceptBeginConnect, Connectvagy ConnectAsync metódusban létrehozottaknak.

Ha kapcsolat nélküli protokollt használ, a hívás SendToAsyncelőtt nem kell létrehoznia egy alapértelmezett távoli gazdagépet az BeginConnect, Connectvagy ConnectAsync metódus használatával. Ezt csak akkor kell megtennie, ha meg szeretné hívni a BeginSend metódusokat.SendAsync Ha a hívás SendToAsyncelőtt hívja meg a BeginConnect, Connectvagy ConnectAsync metódust, a SocketAsyncEventArgs.RemoteEndPoint tulajdonság felülírja a megadott alapértelmezett távoli gazdagépet, amely csak a küldési művelethez van felülbírálva. A metódus meghívása Bind sem kötelező. Ebben az esetben a mögöttes szolgáltató a legmegfelelőbb helyi hálózati IP-címet és portszámot rendeli hozzá. Használjon nulla portszámot, ha azt szeretné, hogy a mögöttes szolgáltató válasszon egy ingyenes portot. Ha azonosítania kell a hozzárendelt helyi hálózati IP-címet és portszámot, használhatja a LocalEndPoint tulajdonságot az SocketAsyncEventArgs.Completed esemény jelzése és a társított meghatalmazottak meghívása után.

Ha adatokat szeretne küldeni egy szórási címre, először meg kell hívnia a SetSocketOption metódust, és meg kell adnia a szoftvercsatorna-beállítást igaz értékre SocketOptionName.Broadcast . Azt is meg kell győződnie, hogy a puffer mérete nem haladja meg a mögöttes szolgáltató maximális csomagméretét. Ha igen, a datagram nem lesz elküldve, és SendToAsync egy SocketException.

Ha megadja a DontRoute jelölőt a SocketAsyncEventArgs.SocketFlags tulajdonságban, a rendszer nem irányítja át a küldendő adatokat.

Az üzenetorientált szoftvercsatornák esetében ügyelni kell arra, hogy ne lépje túl a mögöttes átvitel maximális üzenetméretét. Ha a puffer mérete meghaladja a mögöttes szolgáltató maximális csomagméretét, a rendszer nem küldi el a datagramot, és SendToAsync egy SocketException. A metódus sikeres befejezése SendToAsync nem jelzi az adatok sikeres kézbesítését.

A következőre érvényes:

Lásd még