108
{
WSADATA wsaData; // WSADATA变量,用于初始化Windows Sockets SOCKET RecvSocket; // 发送消息的SOCKET
sockaddr_in
RecvAddr;
//
服务器端地址
int Port = 27015; // 服务器端监听地址
char RecvBuf[1024]; // 发送数据的缓冲区
int BufLen = 1024; // 缓冲区大小
sockaddr_in
SenderAddr; //
发送者的地址
int SenderAddrSize = sizeof(SenderAddr);
// 初始化Winsock
WSAStartup(MAKEWORD(2,2), &wsaData);
// 创建接收数据报的Socket
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// 将Socket与指定端口和0.0.0.0绑定
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));
// 调用recvfrom()函数在绑定的Socket上接收数据
printf("\n");
recvfrom(RecvSocket,
RecvBuf,
BufLen,
0,
(SOCKADDR *)&SenderAddr,
&SenderAddrSize);
// 关闭Socket,结束接收数据
printf("Finished receiving. Closing socket.\n");
closesocket(RecvSocket);
// 释放资源,退出
printf("Exiting.\n");
WSACleanup();
return 0;
}
5.6 Socket选项
前面介绍了Socket编程的基本方法。在有些情况下,需要对Socket的行为和属性进行进一步的控制,例如修改缓冲区的大小等,这就需要设置Socket选项。
recv函数5.6.1 调用getsockopt()函数获取Socket选项
getsockopt()的函数原型如下。
int getsockopt(
SOCKET s,
int level,
int optname,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论