基本介紹
Socket
(Byte[], Int32, SocketFlags, EndPoint)
使用指定的 SocketFlags,將指定位元組數的數據傳送到指定的終結點。
Visual Basic
Overloads Public Function SendTo( _
ByVal buffer() As Byte, _ByVal size As Integer, _
ByVal socketFlags As SocketFlags, _
ByVal remoteEP As EndPoint _
) As Integer
C#
public int SendTo(
byte[] buffer,
int size,
SocketFlags socketFlags,
EndPoint remoteEP
);
C++
系統聲明
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);
返回值
為整型,如果成功,則返回傳送的位元組數,失敗則返回SOCKET_ERROR。
系統解釋
s 套接字
buff 待傳送數據的緩衝區
size 緩衝區長度
Flags 調用方式標誌位, 一般為0, 改變Flags,將會改變Sendto傳送的形式
addr (可選)指針,指向目的套接字的地址
len addr所指地址的長度
JScript
public function SendTo(
buffer : Byte[],
size : int,
socketFlags : SocketFlags,
remoteEP : EndPoint
) : int;
參數buffer
Byte 類型的數組,它包含要傳送的數據。
size
要傳送的位元組數。
socketFlags
SocketFlags 值的按位組合。
remoteEP
EndPoint,表示數據的目標位置。
返回值
已傳送的位元組數。
Linux C函式
sendto(經socket傳送數據)
相關函式
send , sendmsg,recv , recvfrom , 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 傳給系統調用的參數不正確。
範例
#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;
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);”
}
}
執行 請參考recvfrom()