CAsyncSocket::SendToEx
呼叫此成員函式將資料傳送至特定目的 (處理 IPv6 位址)。
int SendToEx(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0
);
參數
lpBuf
包含資料的緩衝區傳輸。nBufLen
資料的長度 (以 lpBuf 的 (以位元組為單位)。nHostPort
識別應用程式通訊的通訊埠。lpszHostAddress
這個物件連接的通訊端位址:一個電腦名稱 (例如「ftp.microsoft.com」,或者已虛線的數字 (例如「128.56.22.8」。nFlags
指定呼叫的方法。通訊端選項和 nFlags 參數取決於函式語意。後者可透過合併下列其中一個值來建構的 C++ OR 運算子:MSG_DONTROUTE 指定資料不應傳送受到限制。Windows Sockets 供應商可以選擇忽略這個旗標。
MSG_OOB 傳送 Out-of-Band 資料 (僅限SOCK_STREAM )。
傳回值
如果未發生任何錯誤, SendToEx 傳回傳送的字元總數。(請注意這項 nBufLen運算式的數目可能小於)。否則, SOCKET_ERROR 的值,都會傳回,而特定錯誤碼來呼叫 GetLastError擷取。下列錯誤套用至這個成員函式:
WSANOTINITIALISED A 成功 AfxSocketInit 必須在使用此 API 之前發生。
WSAENETDOWN 視窗通訊端實作偵測網路子系統失敗。
WSAEACCES 需求的位址是廣播位址,不過,適當的旗標尚未設定。
封鎖視窗通訊端作業的WSAEINPROGRESS A 正在進行中。
WSAEFAULTlpBuf 或 lpSockAddr 參數不為使用者位址空間的一部分,或 lpSockAddr 引數太少 (小於 SOCKADDR 結構的大小)。
WSAEINVAL 主機名稱無效。
WSAENETRESET 連接,因為 Windows Sockets 實作去除,它必須重設。
WSAENOBUFS Windows Sockets 實作報表緩衝區死結。
WSAENOTCONN 通訊端未連接SOCK_STREAM (僅限)。
WSAENOTSOCK 描述元不是通訊端。
WSAEOPNOTSUPP MSG_OOB 已指定,但不是,通訊端類型 SOCK_STREAM。
WSAESHUTDOWN 通訊端已經關閉,,在 ShutDown 叫用 nHow 設為 1 或 2. 之後,呼叫在通訊端上 SendToEx 是不可能的。
WSAEWOULDBLOCK 通訊端標記為未封鎖,並且所要求的作業將會封鎖。
WSAEMSGSIZE 通訊端是型別, SOCK_DGRAM,而且資料包大於視窗通訊端實作支援的最大值。
WSAECONNABORTED 虛擬通道中止的緣故暫止或任何其他失敗。
WSAECONNRESET 虛擬通道由遠端重設。
WSAEADDRNOTAVAIL 指定位址的從本機電腦無法使用。
在指定的家族的WSAEAFNOSUPPORT 位址不能使用這個通訊端。
WSAEDESTADDRREQ A 需要目的位址。
WSAENETUNREACH 網路無法從這個階段的這個主機為止。
備註
這個方法與相同,但是它 CAsyncSocket::SendTo 處理 IPv6 位址和舊版的通訊協定。
在SendToEx 資料包或資料流通訊端通訊端上使用和用於寫入輸出資料。對於資料包通訊端,必須小心不要超過基礎子網路的 IP 封包大小上限時,就 AfxSocketInit填寫的 WSADATA 結構項目的 iMaxUdpDg 度量。如果資料太長而無法通過原子基礎通訊協定,錯誤 WSAEMSGSIZE ,都會傳回,而且資料不會傳輸。
請注意 SendToEx 順利完成並不代表資料已成功傳遞資料。
在SendToExSOCK_DGRAM 通訊端只用來傳送資料包至 lpSockAddr 參數所識別的特定通訊端。
若要傳送廣播 (僅限 SOCK_DGRAM ),則應在建構 lpSockAddr 參數的位址使用特殊 IP 位址 INADDR_BROADCAST (定義於 Windows Sockets 標頭檔 WINSOCK.H) 與預期的通訊埠編號。或者, lpszHostAddress ,如果參數為, NULL通訊端為廣播配置。超過分散可能發生,提示大小以廣播資料包通常不會破壞的資料包的資料區段 (不包括標頭) 不能超過 512 個位元組。
需求
Header: afxsock.h