fromlen:(可選)
函數原型:
int sendto( SOCKET s, const char FAR* buf, int size, int flags, const struct sockaddr FAR* to, int tolen);
參數說明:
s:套接字
buf:待發送數據的緩沖區
size:緩沖區長度
flags:調用方式標志位, 一般為0, 改變Flags,將會改變Sendto發送的形式
addr:(可選)指針,指向目的套接字的地址
tolen:addr所指地址的長度
返回值:
如果成功,則返回發送的字節數,失敗則返回SOCKET_ERROR。
函數原型:
int accept( int fd, struct socketaddr* addr, socklen_t* len);
參數說明:
fd:套接字描述符。
addr:返回連接著的地址
len:接收返回地址的緩沖區長度
返回值:
成功返回客戶端的文件描述符,失敗返回-1。
服務端(Server):
#include<winsock2.h> #include<stdio.h> #pragmacomment(lib,"ws2_32.lib") voidmain() { WSADATA wsaData; SOCKET sockServer; SOCKADDR_IN addrServer; SOCKET sockClient; SOCKADDR_IN addrClient; WSAStartup(MAKEWORD(2,2),&wsaData); sockServer=socket(AF_INET,SOCK_STREAM,0); addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示任何IP addrServer.sin_family=AF_INET; addrServer.sin_port=htons(6000);//綁定端口6000 bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); //Listen監聽端 listen(sockServer,5);//5為等待連接數目 printf("服務器已啟動:\n監聽中...\n"); intlen=sizeof(SOCKADDR); charsendBuf[100];//發送至客戶端的字符串 charrecvBuf[100];//接受客戶端返回的字符串 //會阻塞進程,直到有客戶端連接上來為止 sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&len); //接收並打印客戶端數據 recv(sockClient,recvBuf,100,0); printf("%s\n",recvBuf); //關閉socket closesocket(sockClient); WSACleanup();}
客戶端 (Client):