免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1214 | 回复: 0
打印 上一主题 下一主题

组播例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-20 15:19 |只看该作者 |倒序浏览
//////////////////////////server////////////////////////////////
/*
编译程序用下列命令:
gcc -Wall mcastclient.c -o mcastclient
gcc -Wall mcastserver.c -o mcastserver
运行程序用如下命令:
./mcastserver 230.1.1.1 7838
客户端程序运行命令为:
./mcastclient 230.1.1.1 7838 192.168.100.1 12345
*/
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFLEN 255
/*********************************************************************
*filename: mcastserver.c
*purpose: 演示组播编程的基本步骤,组播服务器端,关键在于加入组
*tidied by: zhoulifa(
zhoulifa@163.com
) 周立发(
http://zhoulifa.bokee.com
)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2007-01-25 13:20:00
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to: Google.com
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!
*********************************************************************/
int main(int argc, char **argv)
{
    struct sockaddr_in peeraddr;
    struct in_addr ia;
    int sockfd;
    char recmsg[BUFLEN + 1];
    unsigned int socklen, n;
    struct hostent *group;
    struct ip_mreq mreq;
   
    /* 创建 socket 用于UDP通讯 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd
    /* 设置要加入组播的地址 */
     bzero(&mreq, sizeof(struct ip_mreq));
     if (argv[1])
      {
         if ((group = gethostbyname(argv[1])) == (struct hostent *) 0)
          {
            perror("gethostbyname");
            exit(errno);
          }
      }
     else
      {
         printf("you should give me a group address, 224.0.0.0-239.255.255.255\n");
         exit(errno);
      }
      bcopy((void *) group->h_addr, (void *) &ia, group->h_length);
      /* 设置组地址 */
      bcopy(&ia, &mreq.imr_multiaddr.s_addr, sizeof(struct in_addr));
       /* 设置发送组播消息的源主机的地址信息 */
      mreq.imr_interface.s_addr = htonl(INADDR_ANY);
       /* 把本机加入组播地址,即本机网卡作为组播成员,只有加入组才能收到组播消息 */
     if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,sizeof(struct ip_mreq)) == -1)
      {
        perror("setsockopt");
        exit(-1);
       }
     socklen = sizeof(struct sockaddr_in);
     memset(&peeraddr, 0, socklen);
     peeraddr.sin_family = AF_INET;
     if (argv[2])
        peeraddr.sin_port = htons(atoi(argv[2]));
     else
        peeraddr.sin_port = htons(7838);
     if (argv[1])
      {
         if (inet_pton(AF_INET, argv[1], &peeraddr.sin_addr)
/* 绑定自己的端口和IP信息到socket上 */
    if (bind(sockfd, (struct sockaddr *) &peeraddr,sizeof(struct sockaddr_in)) == -1)
     {
        printf("Bind error\n");
        exit(0);
      }
      
int len = 0;
      len = sizeof(struct sockaddr_in);
      printf("%s\n", inet_ntoa(peeraddr.sin_addr));
     printf("port:%d\n", peeraddr.sin_port);  
     
/* 循环接收网络上来的组播消息 */
for (;;)
{
    bzero(recmsg, BUFLEN + 1);
    n = recvfrom(sockfd, recmsg, BUFLEN, 0,(struct sockaddr *) &peeraddr, &socklen);
    if (n
}





///////////////////////////////client/////////////////////////////////


#include
#include
#include
#include
#include
#include
#define BUFLEN 255
/*********************************************************************
*filename: mcastclient.c
*purpose: 演示组播编程的基本步骤,其实这就是一个基本的UDP客户端程序
*tidied by: zhoulifa(
zhoulifa@163.com
) 周立发(
http://zhoulifa.bokee.com
)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2007-01-25 13:10:00
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to: Google.com
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!
*********************************************************************/
int main(int argc, char **argv)
{
    struct sockaddr_in peeraddr, myaddr;
    int sockfd;
    char recmsg[BUFLEN + 1];
    unsigned int socklen;
   
    /* 创建 socket 用于UDP通讯 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35065/showart_2154928.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP