UDP点对点通讯、广播通讯、多播通讯

IP地址的简介:
IP地址是由32位二进制组成:网络号+主机号。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址分为A、B、C、D、E5类。常用的是B和C两类。
一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。
一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。
C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台

D类IP地址:1110  +多播地址
    即多播地址范围: 224.0.0.1 - 239.255.255.255

全0或全1的网络号、主机号保留作特殊用途:

网络号
主机号
代表的意思
全0
全0
本网络上本主机
全0
host-id
本网络上主机号为host-id的主机
net-id
全1不分配给任何主机,表示某个网络的网络地址,代表的是一个网段
全1全1
表示本网络上所有的主机,是本地网络的广播地址
net-id
全1
对net-id网络上所有主机进行广播,是远程网络的广播地址
  1. /********************************************************************** 
  2. * Compiler: GCC 
  3. * Last Update:  Sat 12 Nov 2011 11:52:25 PM CST 
  4. * File Name: myServerUDP1.c 
  5. * Description: UDP点对点通讯服务器端,默认端口地址为PORT 
  6. * Usage: ./mySErverUDP1  服务器所绑定的IP地址 端口号 
  7. ************************************************************************/  
  8.   
  9. #include <stdio.h>  
  10. #include <stdlib.h>  
  11. #include <errno.h>  
  12. #include <string.h>  
  13. #include <netinet/in.h>  
  14. #include <sys/types.h>  
  15. #include <sys/socket.h>  
  16. #define MAXBUF 1024  
  17. #define PORT 60000  
  18.    
  19. int main(int argc, char **argv)  
  20. {  
  21.     int myFd, clientFd;  
  22.     struct sockaddr_in myAddr, clientAddr;  
  23.     int addrlen = sizeof(clientAddr);  
  24.     char buf[MAXBUF];  
  25.     char addrTemp[INET_ADDRSTRLEN];  
  26.   
  27.     bzero(&myAddr, sizeof(myAddr));  
  28.     bzero(&clientAddr, sizeof(clientAddr));  
  29.     //创建套接字,datagrams  
  30.     if((myFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
  31.         printf("错误码:%d, %s\n", errno, strerror(errno));  
  32.         exit(errno);  
  33.     }  
  34.     myAddr.sin_family  = AF_INET;  
  35.     if (argc == 2) {  //IP地址  
  36.         int res;  
  37.         if ((res = inet_pton(AF_INET, argv[1], &myAddr.sin_addr)) == -1) {  
  38.             printf("错误码:%d, %s\n", errno, strerror(errno));  
  39.             exit(errno);  
  40.         } else if(res == 0) {  
  41.             printf("IP地址无效\n");  
  42.             return 0;  
  43.         }   
  44.     } else {  
  45.         myAddr.sin_addr.s_addr = INADDR_ANY;  
  46.     }  
  47.     if (argc == 3) {  
  48.         myAddr.sin_port = htons(atoi(argv[2]));  
  49.     } else {  
  50.         myAddr.sin_port = htons(PORT);  
  51.     }  
  52.   
  53.     if(bind(myFd, (struct sockaddr *)&myAddr, sizeof(myAddr)) != 0) {  
  54.         printf("错误码:%d, %s\n", errno, strerror(errno));  
  55.         exit(errno);  
  56.     }  
  57.     printf("服务器已启动,等待连接中.....\n");  
  58.     while (1) {  
  59.         bzero(buf, sizeof(buf));  
  60.         if (recvfrom(myFd, buf, sizeof(buf) - 1, 0,   
  61.                     (struct sockaddr *)&clientAddr, &addrlen) == -1) {  
  62.             printf("错误码:%d, %s\n", errno, strerror(errno));  
  63.             exit(errno);  
  64.         }  
  65.         printf("收到来自%s的消息:%s\n",   
  66.                 inet_ntop(AF_INET, &clientAddr.sin_addr, addrTemp, sizeof(addrTemp)), buf);  
  67.     }  
  68.   
  69.     return 0;  
  70. }  


  1. /********************************************************************** 
  2. * Compiler: GCC 
  3. * Last Update:  Sat 12 Nov 2011 11:39:22 PM CST 
  4. * File Name: myClientUDP1.c 
  5. * Description: UDP点对点或广播通讯客户端,端口号默认为PORT 
  6. * Usage: ./myClientUDP1  对方IP地址 端口号 
  7. ************************************************************************/  
  8.   
  9. #include <stdio.h>  
  10. #include <stdlib.h>  
  11. #include <errno.h>  
  12. #include <string.h>  
  13. #include <netinet/in.h>  
  14. #include <sys/types.h>  
  15. #include <sys/socket.h>  
  16. #define MAXBUF 1024  
  17. #define PORT 60000  
  18.    
  19. int main(int argc, char **argv)  
  20. {  
  21.     int myFd;  
  22.     struct sockaddr_in serverAddr;  
  23.     int addrlen = sizeof(serverAddr);  
  24.     char buf[MAXBUF];  
  25.   
  26.     bzero(&serverAddr, sizeof(serverAddr));  
  27.     bzero(buf, sizeof(buf));  
  28.     //创建套接字,datagrams  
  29.     if((myFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
  30.         printf("socket()错误码:%d, %s\n", errno, strerror(errno));  
  31.         exit(errno);  
  32.     }  
  33.     /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可以收到 */  
  34.     int yes = 1;  
  35.     if(setsockopt(myFd, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes)) != 0) {  
  36.         printf("setsockopt()错误码:%d, %s\n", errno, strerror(errno));  
  37.         exit(errno);  
  38.     }  
  39.   
  40.     //设置对方的IP地址和端口等属性;  
  41.     serverAddr.sin_family  = AF_INET;  
  42.     if (argc > 1) {  //IP地址  
  43.         int res;  
  44.         if ((res = inet_pton(AF_INET, argv[1], &serverAddr.sin_addr)) == -1) {  
  45.             printf("inet_pton()错误码:%d, %s\n", errno, strerror(errno));  
  46.             exit(errno);  
  47.         } else if(res == 0) {  
  48.             printf("IP地址无效\n");  
  49.             return 0;  
  50.         }   
  51.     } else {  
  52.         printf("Usage: %s 对方IP地址\n", argv[0]);  
  53.         return 0;  
  54.     }  
  55.     if (argc == 3) {  
  56.         serverAddr.sin_port = htons(atoi(argv[2]));  
  57.     } else {  
  58.         serverAddr.sin_port = htons(PORT);  
  59.     }  
  60.       
  61.     strcpy(buf, "Hello,I'm Client");  
  62.     if (sendto(myFd, buf, strlen(buf) + 1, 0,   
  63.                 (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == -1) {  
  64.         printf("sendto()错误码:%d, %s\n", errno, strerror(errno));  
  65.         exit(errno);  
  66.     }  
  67.     printf("成功给服务器发送消息:\"%s\"\n", buf);  
  68.   
  69.     return 0;  
  70. }  
Windows下的一个UDP服务器程序
  1. #include <stdio.h>  
  2. #include <Winsock2.h>  
  3. #define LISTEN_PORT 8888  
  4. int main()  
  5. {  
  6.     SOCKET socket1;  
  7.     WSADATA wsaData;  
  8.     int iErrorCode;  
  9.     if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL  
  10.     {  
  11.         printf("Winsock无法初始化!\n");  
  12.         WSACleanup();  
  13.         return 1;  
  14.     }  
  15.     printf("服务器开始创建SOCKET。\n");  
  16.     struct sockaddr_in local;  
  17.     struct sockaddr_in from;  
  18.     int fromlen =sizeof(from);  
  19.     local.sin_family=AF_INET;  
  20.     local.sin_port=htons(LISTEN_PORT); ///监听端口  
  21.     local.sin_addr.s_addr=INADDR_ANY; ///本机  
  22.     socket1=socket(AF_INET,SOCK_DGRAM,0);  
  23.     bind(socket1,(struct sockaddr*)&local,sizeof(local));  
  24.     while (1)  
  25.     {  
  26.         char buffer[1024]="\0";  
  27.         printf("waiting for message from others-------------\n");  
  28.         if (recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)  
  29.                     &from,&fromlen)!=SOCKET_ERROR)  
  30.         {  
  31.             printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);  
  32.             给cilent发信息  
  33.             sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,fromlen);  
  34.   
  35.         }  
  36.         //Sleep(1000);  
  37.     }  
  38.     closesocket(socket1);  
  39.   
  40.     return 0;  
  41. }  

如果不设置通讯方式为广播方式的话,进行广播会出现
[test1@localhost 周立发]$ ./myClientUDP1 192.168.1.255
sendto()错误码:13, Permission denied

设置通讯方式为广播方式,进行测试,可以去下载一个  TCP&UDP_SocketTest调试工具v2.2,在windows下开启一个服务器,或者在主机windows下也写一个UDP服务器程序,要是通过无线上网的话,主机没法收到虚拟机的广播消息,不知道怎么回事,通过无线上网就行。
以下是测试过程,windows下
[test1@localhost 周立发]$ ./myClientUDP1 255.255.255.255
成功给服务器发送消息:"Hello,I'm Client"

[test1@localhost 周立发]$ ./myServerUDP1
服务器已启动,等待连接中.....
收到来自192.168.1.104的消息:Hello,I'm Client


主机Win7测试程序的运行结果:

服务器开始创建SOCKET。
aiting for message from others-------------
eceived datagram from 192.168.1.104--Hello,I'm Client

广播成功!

************************************************************************

     广播的缺点:不管主机是否有程序接收广播消息,广播消息一定会被网卡收到并提交给操作系统去处理,所以会造成网络上流量增大,对不接收广播消息的主机造成一定的负担。
     像广播一样,多播消息一样会被复制发到网络所有主机的网卡上,但只有宣布加入某个多播组的主机的网卡才会把数据提交给操作系统去处理。如果没有加入组,则网卡直接将数据丢弃。

************************************************************************

多播服务器端编程步骤:
1、调用socket()创建套接字
2、设置一个多播的IP地址和端口
3、向此多播地址发送数据

多播客户端编程步骤:
1、调用socket()创建套接字
2、步聚2可选,设置本上回环许可IP_MULTICAST_LOOP.默认该选项是激活的。
3、步聚3可选,设置IP_MULTICAST_TTL,每经过一个路由器,TTl的值自动减1。该值默认为1,防止多播报文往局域网外传播,可对其进行设置(0~255)
4、首先对下面这个结构体赋值
struct ip_mreq
{
        struct in_addr imr_multiaddr;   /* IP multicast address of group */
        struct in_addr imr_interface;   /* local IP address of interface */
};
然后调用setsockopt将本机加入多播组
setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
            sizeof(struct ip_mreq))
5、调用bind()绑定本地套接字
6、recvfrom()
7、退出广播组setsockopt (socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq
)

示例程序:

  1. /********************************************************************** 
  2. * Compiler: GCC 
  3. * Last Update:  Sat 12 Nov 2011 11:33:01 PM CST 
  4. * File Name: myServerMulticast2.c 
  5. * Description: 多播客户端 
  6. * Usage: myServerMulticast2 多播地址 [端口号(默认为PORT)] 
  7. ************************************************************************/  
  8. #include <stdio.h>  
  9. #include <stdlib.h>  
  10. #include <errno.h>  
  11. #include <string.h>  
  12. #include <netinet/in.h>  
  13. #include <sys/types.h>  
  14. #include <sys/socket.h>  
  15. #define MAXBUF 1024  
  16. #define PORT 60000  
  17.    
  18. int main(int argc, char **argv)  
  19. {  
  20.     int myFd;  
  21.     struct sockaddr_in mCastAddr;  
  22.     int addrlen = sizeof(mCastAddr);  
  23.     char buf[MAXBUF];  
  24.   
  25.     bzero(&mCastAddr, sizeof(mCastAddr));  
  26.     bzero(buf, sizeof(buf));  
  27.     //创建套接字  
  28.     if((myFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
  29.         printf("socket()错误码:%d, %s\n", errno, strerror(errno));  
  30.         exit(errno);  
  31.     }  
  32.   
  33.     mCastAddr.sin_family  = AF_INET;  
  34.     if (argc > 1) {  //IP地址  
  35.         int res;  
  36.         if ((res = inet_pton(AF_INET, argv[1], &mCastAddr.sin_addr)) == -1) {  
  37.             printf("inet_pton()错误码:%d, %s\n", errno, strerror(errno));  
  38.             exit(errno);  
  39.         } else if(res == 0) {  
  40.             printf("IP地址无效\n");  
  41.             printf("请输入一个多播地址:224.0.0.1 ~ 239.255.255.255\n");  
  42.             return 0;  
  43.         }   
  44.     } else {  
  45.         printf("Usage: %s 多播IP地址\n", argv[0]);  
  46.         return 0;  
  47.     }  
  48.       
  49.     if (argc == 3) {  
  50.         mCastAddr.sin_port = htons(atoi(argv[2]));  
  51.     } else {  
  52.         mCastAddr.sin_port = htons(PORT);  
  53.     }  
  54.       
  55.     //设置IP_MULTICAST_TTL 为1,即该多播最多只能经过一个路由器.TTL默认即为1  
  56.     //u_char ttl = 1;  
  57.     //if (setsockopt(myFd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) != 0) {  
  58.     //    printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  59.     //            __FILE__, __LINE__, errno, strerror(errno));  
  60.     //    exit(errno);  
  61.     //}  
  62.   
  63.     while (1) {  
  64.         bzero(buf, sizeof(buf));  
  65.         printf("请输入要发送的消息:");  
  66.         if (fgets(buf, sizeof(buf), stdin) == NULL) {  
  67.             exit(0);  
  68.         }  
  69.         if (sendto(myFd, buf, strlen(buf) + 1, 0,   
  70.                     (struct sockaddr *)&mCastAddr, sizeof(mCastAddr)) == -1) {  
  71.             printf("sendto()错误码:%d, %s\n", errno, strerror(errno));  
  72.             exit(errno);  
  73.         }  
  74.         printf("成功给对方发送消息:%s", buf);  
  75.     }  
  76.   
  77.     return 0;  
  78. }  

  1. /********************************************************************** 
  2. * Compiler: GCC 
  3. * Last Update:  Sat 12 Nov 2011 11:17:13 PM CST 
  4. * File Name: myClientMulticast2.c 
  5. * Description:  
  6. ************************************************************************/  
  7. #include <stdio.h>  
  8. #include <stdlib.h>  
  9. #include <errno.h>  
  10. #include <string.h>  
  11. #include <netinet/in.h>  
  12. #include <sys/types.h>  
  13. #include <sys/socket.h>  
  14. #define _DEBUG  
  15. #define MAXBUF 1024  
  16. #define PORT 60000  
  17.    
  18. int main(int argc, char **argv)  
  19. {  
  20.     int myFd, clientFd;  
  21.     struct sockaddr_in myAddr, clientAddr;  
  22.     struct ip_mreq mreq;  
  23.     int addrlen = sizeof(clientAddr);  
  24.     char buf[MAXBUF];  
  25.     char addrTemp[INET_ADDRSTRLEN];  
  26.   
  27.     bzero(&myAddr, sizeof(myAddr));  
  28.     bzero(&clientAddr, sizeof(clientAddr));  
  29.     //创建套接字,datagrams  
  30.     if((myFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
  31.         printf("%s Line number:%d socket()错误码:%d, %s\n", \  
  32.                 __FILE__, __LINE__, errno, strerror(errno));  
  33.         exit(errno);  
  34.     }  
  35.       
  36.     //设置本地地址端口信息  
  37.     myAddr.sin_family  = AF_INET;  
  38.     myAddr.sin_addr.s_addr = INADDR_ANY;  
  39.     if (argc == 3) {  
  40.         myAddr.sin_port = htons(atoi(argv[2]));  
  41.     } else {  
  42.         myAddr.sin_port = htons(PORT);  
  43.     }  
  44.   
  45.     //绑定本地套接字  
  46.     if(bind(myFd, (struct sockaddr *)&myAddr, sizeof(myAddr)) != 0) {  
  47.         printf("%s Line number:%d bind()错误码:%d, %s\n", \  
  48.                 __FILE__, __LINE__, errno, strerror(errno));  
  49.         exit(errno);  
  50.     }  
  51.   
  52.     //设置IP_MULTICAST_LOOP   
  53.     u_char loop = 1;  
  54.     if (setsockopt(myFd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) != 0) {  
  55.         printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  56.                 __FILE__, __LINE__, errno, strerror(errno));  
  57.         exit(errno);  
  58.     }  
  59.   
  60.     //设置IP_MULTICAST_TTL 为1,即该多播最多只能经过一个路由器  
  61.     u_char ttl = 1;  
  62.     if (setsockopt(myFd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) != 0) {  
  63.         printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  64.                 __FILE__, __LINE__, errno, strerror(errno));  
  65.         exit(errno);  
  66.     }  
  67.   
  68.     //对struct ip_mreq这个结构体赋值  
  69.     if (argc > 1) {  //设置IP地址  
  70.         int res;  
  71.         if ((res = inet_pton(AF_INET, argv[1], &mreq.imr_multiaddr)) == -1) {  
  72.             printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  73.                 __FILE__, __LINE__, errno, strerror(errno));  
  74.             exit(errno);  
  75.         } else if(res == 0) {  
  76.             printf("IP地址无效\n");  
  77.             printf("请输入一个多播地址:224.0.0.1 ~ 239.255.255.255\n");  
  78.             return 0;  
  79.         }   
  80.     } else {  
  81.         printf("Usage:%s 多播地址(224.0.0.1 ~ 239.255.255.255)\n", argv[0]);  
  82.         return(0);  
  83.     }  
  84.     mreq.imr_interface.s_addr =  INADDR_ANY;  
  85.     //将本机加入多播组中  
  86.     if (setsockopt (myFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) != 0) {  
  87.         printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  88.                 __FILE__, __LINE__, errno, strerror(errno));  
  89.         exit(errno);  
  90.     }  
  91.   
  92.     printf("客户端已启动,等待多播消息.....\n");  
  93.     while (1) {  
  94.         bzero(buf, sizeof(buf));  
  95.         if (recvfrom(myFd, buf, sizeof(buf) - 1, 0,   
  96.                     (struct sockaddr *)&clientAddr, &addrlen) == -1) {  
  97.             printf("%s Line number:%d recvfrom()错误码:%d, %s\n", \  
  98.                     __FILE__, __LINE__, errno, strerror(errno));  
  99.             exit(errno);  
  100.         }  
  101.         printf("收到来自%s的消息:%s",   
  102.                 inet_ntop(AF_INET, &clientAddr.sin_addr, addrTemp, sizeof(addrTemp)), buf);  
  103.         if (strcmp("exit\n", buf) == 0) {  
  104.             break;  
  105.         }  
  106.     }  
  107.     //退出广播组  
  108.     if (setsockopt (myFd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)) != 0) {  
  109.         printf("%s Line number:%d setsockopt()错误码:%d, %s\n", \  
  110.                 __FILE__, __LINE__, errno, strerror(errno));  
  111.         exit(errno);  
  112.     }  
  113.   
  114.     return 0;  
  115. }  
同样,必须在主机有线上网的情况下主机才能收到虚拟机的多播消息,主机通过无线上网收不到!这个问题有待解决。

运行结果:

起始我输入一个非法的多播地址,结果出错了
[test1@localhost 周立发]$ ./myClientMulticast2  244.0.0.88
setsockopt()错误码:22, Invalid argument
//在试图加到一个多播组里出错了
setsockopt (myFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)

#重新输入一个正确的多播地址,如224.1.1.1
[test1@localhost 周立发]$ ./myServerMulticast2 224.1.1.1
请输入要发送的消息:hello
成功给对方发送消息:hello
请输入要发送的消息:exit
成功给对方发送消息:exit

[test1@localhost 周立发]$ ./myClientMulticast2 224.1.1.1
客户端已启动,等待多播消息.....
收到来自192.168.1.104的消息:hello
收到来自192.168.1.104的消息:exit

主机windows下用TCP/UDP SOCKET调试工具V2.2 也成功收到多播数据。
23:45:05 收到数据:hello
23:45:08 收到数据:exit


@@@@@@

来源:http://book.51cto.com/art/200912/168573.htm
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中,你可以使用UDP协议进行单播、多播广播通信。下面是一些基本概念和代码示例: 1. 单播(Unicast):将数据从一个发送方发送到一个接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { string message = "Hello, Unicast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, "接收方IP地址", 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 2. 多播(Multicast):将数据从一个发送方发送到一组接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { udpClient.JoinMulticastGroup(组播组IP地址); string message = "Hello, Multicast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, 组播组IP地址, 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { udpClient.JoinMulticastGroup(组播组IP地址); IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 3. 广播(Broadcast):将数据从一个发送方发送到同一子网中的所有接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { udpClient.EnableBroadcast = true; string message = "Hello, Broadcast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, "255.255.255.255", 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 请注意,示例中的IP地址和端口号需要根据实际情况进行替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值