1. 确认网络适配器已启用组播。打开“设备管理器”,展开“网络适配器”并找到你的网络适配器。右键单击适配器并选择“属性”。在“高级”选项卡中,确保“组播”或“IGMP”选项已启用。
2. 在Windows防火墙中允许UDP组播流量。打开“控制面板”,选择“系统和安全”,然后选择“Windows防火墙”。选择“高级设置”并选择“入站规则”。在右侧,单击“新建规则”并选择“自定义”选项。选择“所有程序”并单击“下一步”。在“协议类型”中,选择“UDP”并选择“特定本地端口”。输入组播端口号并选择“允许连接”。选择“公用网络”并为规则命名。单击“完成”以保存规则。
3. 在路由器或交换机上启用UDP组播。如果你的网络使用路由器或交换机,则需要在设备上启用UDP组播。这通常涉及到配置IGMP Snooping和其他组播相关设置。
为什么要允许UDP组播?
UDP组播是一种网络通信方式,使一个数据包可以发送到多个主机。这在许多应用程序中非常有用,例如视频流和在线游戏。如果你的网络不允许UDP组播,则这些应用程序可能无法正常工作。因此,启用UDP组播可以帮助确保应用程序可以正常运行。
Windows下C语言的Socket编程例子(TCP和UDP)一。 <TCP>
server端:
复制代码
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib,"ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 //初始化WSA
10 WORD sockVersion = MAKEWORD(2,2)
11 WSADATA wsaData
12 if(WSAStartup(sockVersion, &wsaData)!=0)
13 {
14 return 0
15 }
16
17 //创建套接字
18 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
19 if(slisten == INVALID_SOCKET)
20 {
21 printf("socket error !")
22 return 0
23 }
24
25 //绑定IP和端口
26 sockaddr_in sin
27 sin.sin_family = AF_INET
28 sin.sin_port = htons(8888)
29 sin.sin_addr.S_un.S_addr = INADDR_ANY
30 if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
31 {
32 printf("bind error !")
33 }
34
35 //开始监听
36 if(listen(slisten, 5) == SOCKET_ERROR)
37 {
38 printf("listen error !")
39 return 0
40 }
41
42 //循环接收数据
43 SOCKET sClient
44 sockaddr_in remoteAddr
45 int nAddrlen = sizeof(remoteAddr)
46 char revData[255]
47 while (true)
48 {
49 printf("等待连接...\n")
50 sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen)
51 if(sClient == INVALID_SOCKET)
52 {
53 printf("accept error !")
54 continue
55 }
56 printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr))
57
58 //接收数据
59 int ret = recv(sClient, revData, 255, 0)
60 if(ret > 0)
61 {
62 revData[ret] = 0x00
63 printf(revData)
64 }
65
66 //发送数据
67 char * sendData = "你好,TCP客户端!\n"
68 send(sClient, sendData, strlen(sendData), 0)
69 closesocket(sClient)
70 }
71
72 closesocket(slisten)
73 WSACleanup()
74 return 0
75 }
复制代码
client端:
复制代码
1 #include "stdafx.h"
2 #include <WINSOCK2.H>
3 #include <STDIO.H>
4
5 #pragma comment(lib,"ws2_32.lib")
6
7
8 int main(int argc, char* argv[])
9 {
10 WORD sockVersion = MAKEWORD(2,2)
11 WSADATA data
12 if(WSAStartup(sockVersion, &data) != 0)
13 {
14 return 0
15 }
16
17 SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
18 if(sclient == INVALID_SOCKET)
19 {
20 printf("invalid socket !")
21 return 0
22 }
23
24 sockaddr_in serAddr
25 serAddr.sin_family = AF_INET
26 serAddr.sin_port = htons(8888)
27 serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1")
28 if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
29 {
30 printf("connect error !")
31 closesocket(sclient)
32 return 0
33 }
34 char * sendData = "你好,TCP服务端,我是客户端!\n"
35 send(sclient, sendData, strlen(sendData), 0)
36
37 char recData[255]
38 int ret = recv(sclient, recData, 255, 0)
39 if(ret > 0)
40 {
41 recData[ret] = 0x00
42 printf(recData)
43 }
44 closesocket(sclient)
45 WSACleanup()
46 return 0
47 }
复制代码
二. <UDP>
SERVER 端
复制代码
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib, "ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 WSADATA wsaData
10 WORD sockVersion = MAKEWORD(2,2)
11 if(WSAStartup(sockVersion, &wsaData) != 0)
12 {
13 return 0
14 }
15
16 SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
17 if(serSocket == INVALID_SOCKET)
18 {
19 printf("socket error !")
20 return 0
21 }
22
23 sockaddr_in serAddr
24 serAddr.sin_family = AF_INET
25 serAddr.sin_port = htons(8888)
26 serAddr.sin_addr.S_un.S_addr = INADDR_ANY
27 if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
28 {
29 printf("bind error !")
30 closesocket(serSocket)
31 return 0
32 }
33
34 sockaddr_in remoteAddr
35 int nAddrLen = sizeof(remoteAddr)
36 while (true)
37 {
38 char recvData[255]
39 int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen)
40 if (ret > 0)
41 {
42 recvData[ret] = 0x00
43 printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr))
44 printf(recvData)
45 }
46
47 char * sendData = "一个来自服务端的UDP数据包\n"
48 sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen)
49
50 }
51 closesocket(serSocket)
52 WSACleanup()
53 return 0
54 }
复制代码
CLIENT 端
复制代码
1 #include "stdafx.h"
2 #include <stdio.h>
3 #include <winsock2.h>
4
5 #pragma comment(lib, "ws2_32.lib")
6
7 int main(int argc, char* argv[])
8 {
9 WORD socketVersion = MAKEWORD(2,2)
10 WSADATA wsaData
11 if(WSAStartup(socketVersion, &wsaData) != 0)
12 {
13 return 0
14 }
15 SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
16
17 sockaddr_in sin
18 sin.sin_family = AF_INET
19 sin.sin_port = htons(8888)
20 sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1")
21 int len = sizeof(sin)
22
23 char * sendData = "来自客户端的数据包.\n"
24 sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len)
25
26 char recvData[255]
27 int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len)
28 if(ret > 0)
29 {
30 recvData[ret] = 0x00
31 printf(recvData)
32 }
33
34 closesocket(sclient)
35 WSACleanup()
36 return 0
37 }
1、在键盘上按“win+r”组合键,打开运行界面,输入“cmd”命令2、在命令提示符界面中,输入“netstat
-s
-p
udp”命令,按回车。即可显示本机所有udp连接情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)