-
SendTo
鎖定
- 中文名
- SendTo
- 適用於
- 發送未建立連接的UDP數據報
- 參數為
- SOCK_DGRAM
- 指
- 向一指定目的地發送數據
SendTo基本介紹
Socket(Byte, Int32, SocketFlags, EndPoint)
SendToVisual Basic
Overloads Public Function SendTo( _ByVal buffer() As Byte, _ByVal size As Integer, _ByVal socketFlags As SocketFlags, _ByVal remoteEP As EndPoint, )
SendToC#
public int SendTo( byte[] buffer, int size, SocketFlags socketFlags, EndPoint remoteEP );
SendToC++
系統聲明
int FAR sendto ( IN SOCKET s, IN const char FAR * buf, IN int len, IN int flags, IN const struct sockaddr FAR *to, IN int tolen );
個人聲明
typedef int (_stdcall * SendTo) ( SOCKET sSocket, const char * lpBuffer, DWORD dwLength, int dwFlags, const sockaddr_in * sinTo, int dwToLength );
或:
typedef int (_stdcall * SendTo) ( SOCKET sSocket, const char * lpBuffer, DWORD dwLength, int dwFlags, const sockaddr * sinTo, int dwToLength );
s | |
buff | 待發送數據的緩衝區 |
size | 緩衝區長度 |
Flags | 調用方式標誌位, 一般為0, 改變Flags,將會改變Sendto發送的形式 |
addr | (可選)指針,指向目的套接字的地址 |
len_addr | 所指地址的長度 |
返回值 | 整型。如果成功,則返回發送的字節數,失敗則返回SOCKET_ERROR。 |
SendToJScript
public function SendTo( buffer : Byte[], size : int, socketFlags : SocketFlags, remoteEP : EndPoint ) : int;
buffer | Byte 類型的數組,它包含要發送的數據。 |
size | 要發送的字節數。 |
socketFlags | SocketFlags 值的按位組合。 |
remoteEP | EndPoint,表示數據的目標位置。 |
返回值 | 已發送的字節數。 |
SendToLinux C函數
sendto(經socket傳送數據)
表頭文件
#include < sys/types.h >
#include < sys/socket.h >
定義函數
int sendto ( socket s , const void * msg, int len, unsigned int flags, const struct sockaddr * to , int tolen ) ;
函數説明
sendto 用來將數據由指定的socket傳給對方主機。參數s為已建好連線的socket,如果利用UDP協議則不需經過連線操作。參數msg指向欲連線的數據內容,參數flags 一般設0,詳細描述請參考send。參數to用來指定欲傳送的網絡地址,結構sockaddr請參考bind。參數tolen為sockaddr的結構長度。
成功則返回實際傳送出去的字符數,失敗返回-1,錯誤原因存於errno 中。
EBADF 參數s非法的socket處理代碼。
EFAULT 參數中有一指針指向無法存取的內存空間。
ENOTSOCK 參數 s為一文件描述詞,非socket。
EINTR 被信號所中斷。
EAGAIN 此動作會令進程阻斷,但參數s的socket為不可阻斷的。
ENOBUFS 系統的緩衝內存不足。
EINVAL 傳給系統調用的參數不正確。
範例
/*server.c*/ #include<string.h> //bzero頭文件 #include < sys/types.h > #include < sys/socket.h > #include <arpa/inet.h> #define PORT 2345 /*使用的port*/ main(){ int sockfd,len; struct sockaddr_in addr; int addr_len=sizeof(struct sockaddr_in); char buffer[256]; /*建立socket*/ if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){ perror (“socket”); exit(1); } /*填寫sockaddr_in 結構*/ bzero ( &addr, sizeof(addr) ); addr.sin_family=AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr=hton1(INADDR_ANY) ; if (bind(sockfd, (struct addr*)&addr, sizeof(addr))<0){ perror(“connect”); exit(1); } while(1){ bzero(buffer,sizeof(buffer)); len = recvfrom(socket,buffer,sizeof(buffer), 0 , (struct addr*)&addr ,&addr_len); /*顯示client端的網絡地址*/ printf(“receive from %s\n “ , inet_ntoa( addr.sin_addr)); /*將字串返回給client端*/ sendto(sockfd,buffer,len,0,(struct sockaddr*)&addr,addr_len); } }
client.c範例請參考recvfrom