1 #include <stdio.h>
2 #include <string.h>
3 #include <winsock.h>
4 #pragma comment(lib,"ws2_32.lib")
5
6 void main()
7 {
8 //存放版本
9 WORD wversion;
10 //指针,存放网络执行信息
11 WSADATA wsadata;
12 //管理错误,标号
13 int err;
14
15 //客户端套接字,用于连接
16 SOCKET sockclient;
17 //服务器地址
18 SOCKADDR_IN addrserver;
19 //客户端地址
20 SOCKADDR_IN addrclienet;
21
22 //长度
23 int length = 0;
24 //接收
25 char recvstr[256] = { 0 };
26 //标示
27 BOOL bflags=1;
28 //设定版本
29 wversion = MAKEWORD(2, 2);
30 err = WSAStartup(wversion, &wsadata);
31 if (err!=0)
32 {
33 printf("获取版本失败");
34 return;
35 }
36
37 if (LOBYTE(wsadata.wVersion)!=2 || HIBYTE(wsadata.wVersion)!=2)
38 {
39 printf("版本对比失败,不一致");
40 return;
41 }
42 //UDP报文传输
43 sockclient = socket(AF_INET, SOCK_DGRAM, 0);
44 //setsockopt()函数,用于任意类型、任意状态套接口的设置选项值。
45 //尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。
46 //多播必须指定的参数
47 //flags设定,1代表广播,0禁止广播
48 setsockopt(sockclient, SOL_SOCKET, SO_REUSEADDR, &bflags, sizeof(bflags));
49
50 //存放客户端ip地址
51 addrclienet.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
52 addrclienet.sin_family = AF_INET;
53 addrclienet.sin_port = htons(9999);//端口
54 //客户端套接字与客户端信息绑定
55 bind(sockclient, (SOCKADDR*)&addrclienet, sizeof(SOCKADDR));
56 //等于地址长度
57 length = sizeof(SOCKADDR);
58 while (1)
59 {
60 printf("wait-----------------
");
61 //从客户端接收消息,地址信息存放在addrserver中
62 recvfrom(sockclient, recvstr, 256, 0, (SOCKADDR*)&addrserver, &length);
63 if (WSAGetLastError()!=0)
64 {
65 puts("收取失败");
66 }
67 //哪个服务器发送的
68 printf("%s speak %s
", inet_ntoa(addrserver.sin_addr), recvstr);
69 }
70 closesocket(sockclient);
71 WSACleanup();
72 system("pause");
73 }