udp发送结构体实例

发送端 client.c

//server1 发送数据

#include "stock.h"

#define MYPORT 8866 /*定义端口为8866*/



    int main(int argc,char *argv[])
{

    int sockfd,n,m;

    struct sockaddr_in server_addr;

    struct hostent *host;

//保证输入2个参数
    if(argc!=2)
{

    printf("Usage:%s server_ip server_port\n",argv[0]);

    exit(1);

}

//gethostbyname可通过名称得到主机的IP地址

    host=gethostbyname(argv[1]);

//创建套接字

    sockfd=socket(AF_INET,SOCK_DGRAM,0);

    if(sockfd<0)
{

    printf("Socket Error:%s\n",strerror(errno));

    exit(1);

}

//填充服务端的资料

    bzero(&server_addr,sizeof(struct sockaddr_in));

    server_addr.sin_family=AF_INET;

    server_addr.sin_port=htons(MYPORT);

    server_addr.sin_addr=*((struct in_addr *)host->h_addr);


    int i,j;

     struct stock_a
{
   
    int code;          //股票代码
    int bprice[10];    //标价
    int price[10];     //现价

};

    struct stock_a M[100];

//randrom seed

    srand(time(0));
   
///初始化100只股票///
        for(i=0;i<100;i++)
    {
//生成code   
        M[i].code=i;
        //printf("%d\n",M[i].code);///打印股票代码
///生成价格//
            for(j=0;j<10;j++)
        {
            M[i].bprice[j] = 100 + rand()%100;
            M[i].price[j]=100 + rand()%100;
//printf(" %d    %d\n",M[i].price[j],M[i].bprice[j]);
        }
    }
/*向服务器端发送数据报*/
    int t;

    char msg[1024];

            for(i=0;i<100;i++)
        {

               for(j=0;j<3;j++)
            {
             if(j==0)
                   {
       
            sprintf(msg,"%d",M[i].code);//转化成字符串,发送code
           
            n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
           
            usleep(10000);
//发送失败               
                if(n<0)
            {
                printf("send code error!");
            }
           
            }
                else if(j==1)
            {
                for(t=0;t<10;t++)
                 {
                sprintf(msg,"%d",M[i].bprice[t]);//发送bprice
               
                n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
       
//发送失败               
                    if(n<0)
                   {
                    printf("send bprice error!");
                   }
                  }
            }
                else if(j==2)
            {
                    for(t=0;t<10;t++)
                {
               
                     printf("%s A00%d :000000%d:000000%d\n","A111",M[i].code,M[i].bprice[t],M[i].price[t]);
                   
                    sprintf(msg,"%d",M[i].price[t]);//发送price
               
                n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
//发送失败               
                    if(n<0)
                   {
                    printf("send price error!");
                   }
           
                       }
            }   
              }
    }

    printf("stock A send over!\n");
    usleep(1000000);

/股票C111

    struct stock_c
    {
   
        int code;          //股票代码
        int bprice[10];    //标价
        int price[10];     //现价
    };

    struct stock_c N[100];


///初始化200只股票///
        for(i=0;i<100;i++)
    {
//生成code   
        N[i].code=100+i;
//printf("%d\n",M[i].code);///打印股票代码

///生成价格//
            for(j=0;j<10;j++)
        {
            N[i].bprice[j] = 100 + rand()%100;
            N[i].price[j]=100 + rand()%100;
//printf(" %d    %d\n",M[i].price[j],M[i].bprice[j]);
        }
    }

char ms[1024];

        for(i=0;i<100;i++)
    {

               for(j=0;j<3;j++)
              {
           if(j==0)
                   {
            sprintf(ms,"%d",N[i].code);//转化成字符串 发送code
           
            m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
           
            usleep(10000);
//发送失败       
                if(m<0)
                {
                printf("send code error!");
                }
           
            }
                else if(j==1)
            {
                for(t=0;t<10;t++)
                {
                sprintf(ms,"%d",N[i].bprice[t]);//转化成字符串 发送标价
               
                m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
                         
                }
               
//发送失败       
                if(m<0)
                {
                printf("send bprice error!");
                }
            }
                else if(j==2)
            {
                for(t=0;t<10;t++)
                {           
                  printf("%s A00%d :0000000%d:0000000%d\n","C111",N[i].code,N[i].bprice[t],N[i].price[t]);
                sprintf(ms,"%d",N[i].price[t]);//转化成字符串 发送现价
                m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));
           
                      }
            }   
        }
}   
    printf("stock C send over!\n");
   
    close(sockfd);

    return 0;

}

接收端server.c
//server2 接收数据

#include "stock.h"
#define MYPORT 8866 /*定义端口为8866*/

    int main(void)
{
    int sockfd;    //创建socket
    int n,m;         //接收socket
    int addrlen; //地址长度
    int i,j,t;     

//服务器地址信息

    struct sockaddr_in server_addr;
   
//客户端地址信息
   
    struct sockaddr_in client_addr;  

//接收数据struct   

     struct stock_a   
     {
          int mtype;         //消息类型
        int code;         //code
        int bprice[10];    //标价
        int price[10];    //现价
    };

    struct stock_a M[100];

//创建数据报套接字   
   
    sockfd=socket(AF_INET,SOCK_DGRAM,0);
       
        if(sockfd<0)
    {   
        printf("Socket Error:%s\n",strerror(errno));

        exit(1);
    }
// 服务器端填充 sockaddr_in结构

    bzero(&server_addr,sizeof(struct sockaddr_in));

    server_addr.sin_family=AF_INET;

    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);

    server_addr.sin_port=htons(MYPORT);

//绑定套接字

        if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)
    {
    printf("Bind Error:%s\n",strerror(errno));

    exit(1);

    }
    addrlen=sizeof(struct sockaddr);

    printf("The server is waiting datas:\n");

// 接收客户端数据报
   
    char msg[100];
   
        for(i=0;i<100;i++)
    {
            for(j=0;j<3;j++)
        {   
            if(j==0)
               {
//接收数据code            
             n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形   
            M[i].code = atoi(msg);
//接送数据失败
                    if(n<0)
                {
                printf("receive code error!");
                }
   
        }
                else if(j==1)
            {  
                    for(t=0;t<10;t++)
                {
//接收数据bprice
                 n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形               
                M[i].bprice[t] = atoi(msg);
                   }
//接送数据失败
                        if(n<0)
                    {
                        printf("receive bprice error!");
                    }
            }
                else if(j==2)
            {  
                       for(t=0;t<10;t++)
                   {
//接收数据price   
                n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形                   
                 M[i].price[t] = atoi(msg);
//打印接收到的数据              
                 printf("%s A00%d:0000000%d:0000000%d\n","A111",M[i].code,M[i].bprice[t],M[i].price[t]);
      
                     }
//接送数据失败
                        if(n<0)
                    {
                        printf("receive price error!");
                    }
            }
        }   
}
//stock A 接收完毕

printf("receive Stock A over!\n");

usleep(1000000);
/
//接收数据struct a
/
         struct stock_c
    {
        int mtype;         //消息类型
        int code;         //code
        int bprice[10];    //标价
        int price[10];    //现价
    };

    struct stock_c N[100];

    char ms[100];

        for(i=0;i<100;i++)
    {
            for(j=0;j<3;j++)
        {
            if(j==0)
               {
//接收数据code            
             m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形
            N[i].code = atoi(ms);
//接送数据失败        
                     if(m<0)
                {
                printf("receive Stock C code error!");
                }        
           }
           else if(j==1)
        {  
                for(t=0;t<10;t++)
            {
//接收数据bprice
           m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形
           N[i].bprice[t] = atoi(ms);
//接送数据失败        
                     if(m<0)
                {
                printf("receive Stock C bprice error!");
                }
               }
        }
            else if(j==2)
        {  
                 for(t=0;t<10;t++)
            {
//接收数据price           
             m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);
// 将字符串转为整形
            N[i].price[t] = atoi(ms);
//接送数据失败        
                     if(m<0)
                {
                printf("receive Stock C price error!");
                }
//打印接收到的数据
          printf("%s A00%d:0000000%d:0000000%d\n","C111",N[i].code,N[i].bprice[t],N[i].price[t]);
                }
        }
    }
   
}
     printf("receive Stock C over!\n");   

//关闭套接字
close(sockfd);

printf("Message Queue Stock A Send!\n");   

//Message queue 消息队列发送
//stock a
         key_t key;
        int msgid;
        int ret;

       struct stock_a tr;
                     
        key=ftok("/tmp/1",'c');
        printf("key =[%d]\n",key);
//创建消息队列        
        msgid=msgget(key,IPC_CREAT|0666); //通过文件对应

            if(msgid==-1)
               {
                printf("create error\n");
                return -1;
              }
     for(i=0;i<100;i++)
{   
        tr.code = M[i].code;
        tr.mtype = 100+i; //设置消息类型
       
        for(j=0;j<10;j++)
             {
            tr.bprice[j]=M[i].bprice[j];
            tr.price[j]=M[i].price[j];
            }
//发送消息队列           
        ret=msgsnd(msgid,&tr,sizeof(tr),IPC_NOWAIT);
     
        if(ret==-1)
            {
         printf("send message err\n");
               }
}
    printf("Message Queue Stock C Send!\n");

//stock c
        struct stock_c cr;
       
       for(i=0;i<100;i++)
       {
        cr.code = N[i].code;
        cr.mtype = 200+i;   //设置消息类型
        for(j=0;j<10;j++)
             {
        cr.bprice[j]=N[i].bprice[j];
        cr.price[j]=N[i].price[j];
            }
//发送消息队列           
        ret=msgsnd(msgid,&cr,sizeof(cr),IPC_NOWAIT);
     
         if(ret==-1)
               {
         printf("send message err\n");     
            }
         }    

http://hi.baidu.com/%CB%AE%B2%BB%D7%AA%C9%BD%D7%AA/blog/item/cf520ae5690a3539b83820d7.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值