一、头文件及链接的库
#include
#pragma comment(lib,"WS2_32.lib")
二、代码实现
WORD w_req = MAKEWORD(2, 2); //版本号 WSADATA wsadata; int err = WSAStartup(w_req, &wsadata); if (err != 0) return -1;
//检测版本号 if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) return -1;
//创建套接字
SOCKET UDP_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (INVALID_SOCKET == UDP_socket) { err = WSAGetLastError(); printf("socket错误%d\n", err); return -1; }
//本地IP,用于邦套接字 SOCKADDR_IN sin; sin.sin_family = AF_INET; sin.sin_port = htons(9600); sin.sin_addr.s_addr = inet_addr("127.0.0.1");
bool bOpt = true; setsockopt(UDP_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt));
//绑定 err = bind(UDP_socket, (SOCKADDR*)&sin, sizeof(SOCKADDR)); if (SOCKET_ERROR == err) { err = WSAGetLastError(); printf("bind错误%d\n", err); return -1; }
//服务器地址
SOCKADDR_IN udp_from; udp_from.sin_family = AF_INET; udp_from.sin_port = htons(9600); udp_from.sin_addr.s_addr = INADDR_BROADCAST;
int nAddrLen = sizeof(SOCKADDR); while (1) {
//接收阻塞 int nSize = recvfrom(UDP_socket, recv_buf, 400, 0, (SOCKADDR*)&udp_from, &nAddrLen); if (nSize != SOCKET_ERROR) { sendto(UDP_socket, "\x66\x88\x23", 3, 0, (SOCKADDR*)udp_from, nAddrLen); } }
好文推荐
发表评论