共用方式為


CAsyncSocket::SendTo

呼叫此成員函式將資料傳送至特定目的。

int SendTo(
   const void* lpBuf,
   int nBufLen,
   UINT nHostPort,
   LPCTSTR lpszHostAddress = NULL,
   int nFlags = 0 
);
int SendTo(
   const void* lpBuf,
   int nBufLen,
   const SOCKADDR* lpSockAddr,
   int nSockAddrLen,
   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 )。

  • lpSockAddr
    out 包含目標通訊端 (Socket) 位址的 SOCKADDR 結構的指標。

  • nSockAddrLen
    位址的長度 (以 lpSockAddr 的 (以位元組為單位)。

傳回值

如果未發生任何錯誤, SendTo 傳回傳送的字元總數。 (請注意這項 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. 之後,呼叫在通訊端上 SendTo 是不可能的。

  • WSAEWOULDBLOCK 通訊端標記為未封鎖,並且所要求的作業將會封鎖。

  • WSAEMSGSIZE 通訊端是型別, SOCK_DGRAM,而且資料包大於視窗通訊端實作支援的最大值。

  • WSAECONNABORTED 虛擬通道中止的緣故暫止或任何其他失敗。

  • WSAECONNRESET 虛擬通道由遠端重設。

  • WSAEADDRNOTAVAIL 指定位址的從本機電腦無法使用。

  • 在指定的家族的WSAEAFNOSUPPORT 位址不能使用這個通訊端。

  • WSAEDESTADDRREQ A 需要目的位址。

  • WSAENETUNREACH 網路無法從這個階段的這個主機為止。

備註

SendTo 資料包或資料流通訊端通訊端上使用和用於寫入輸出資料。 對於資料包通訊端,必須小心不要超過基礎子網路的 IP 封包大小上限時,就 AfxSocketInit填寫的 WSADATA 結構項目的 iMaxUdpDg 度量。 如果資料太長而無法通過原子基礎通訊協定,錯誤 WSAEMSGSIZE ,都會傳回,而且資料不會傳輸。

請注意 SendTo 順利完成並不代表資料已成功傳遞資料。

SendToSOCK_DGRAM 通訊端只用來傳送資料包至 lpSockAddr 參數所識別的特定通訊端。

若要傳送廣播 (僅限 SOCK_DGRAM ),則應在建構 lpSockAddr 參數的位址使用特殊 IP 位址 INADDR_BROADCAST (定義於 Windows Sockets 標頭檔 WINSOCK.H) 與預期的通訊埠編號。 或者, lpszHostAddress ,如果參數為, NULL通訊端為廣播配置。 超過分散可能發生,提示大小以廣播資料包通常不會破壞的資料包的資料區段 (不包括標頭) 不能超過 512 個位元組。

若要處理 IPv6 位址,請使用 CAsyncSocket::SendToEx

需求

Header: afxsock.h

請參閱

參考

CAsyncSocket 類別

階層架構圖

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send