udp发送结构体实例

发送端 client.c

//server1 发送数据

[cpp]  view plain  copy
 print ?
  1. #include "stock.h"  
  2.   
  3. #define MYPORT 8866 /*定义端口为8866*/  
  4.   
  5.   
  6.   
  7.     int main(int argc,char *argv[])  
  8. {  
  9.   
  10.     int sockfd,n,m;  
  11.   
  12.     struct sockaddr_in server_addr;  
  13.   
  14.     struct hostent *host;  
  15.   
  16. //保证输入2个参数  
  17.     if(argc!=2)  
  18. {  
  19.   
  20.     printf("Usage:%s server_ip server_port\n",argv[0]);  
  21.   
  22.     exit(1);  
  23.   
  24. }  
  25.   
  26. //gethostbyname可通过名称得到主机的IP地址  
  27.   
  28.     host=gethostbyname(argv[1]);  
  29.   
  30. //创建套接字  
  31.   
  32.     sockfd=socket(AF_INET,SOCK_DGRAM,0);  
  33.   
  34.     if(sockfd<0)  
  35. {  
  36.   
  37.     printf("Socket Error:%s\n",strerror(errno));  
  38.   
  39.     exit(1);  
  40.   
  41. }  
  42.   
  43. //填充服务端的资料  
  44.   
  45.     bzero(&server_addr,sizeof(struct sockaddr_in));  
  46.   
  47.     server_addr.sin_family=AF_INET;  
  48.   
  49.     server_addr.sin_port=htons(MYPORT);  
  50.   
  51.     server_addr.sin_addr=*((struct in_addr *)host->h_addr);  
  52.   
  53.   
  54.     int i,j;  
  55.   
  56.      struct stock_a  
  57. {  
  58.      
  59.     int code;          //股票代码  
  60.     int bprice[10];    //标价  
  61.     int price[10];     //现价  
  62.   
  63. };  
  64.   
  65.     struct stock_a M[100];  
  66.   
  67. //randrom seed  
  68.   
  69.     srand(time(0));  
  70.      
  71. ///初始化100只股票///  
  72.         for(i=0;i<100;i++)  
  73.     {  
  74. //生成code     
  75.         M[i].code=i;  
  76.         //printf("%d\n",M[i].code);///打印股票代码  
  77. ///生成价格//  
  78.             for(j=0;j<10;j++)  
  79.         {  
  80.             M[i].bprice[j] = 100 + rand()%100;  
  81.             M[i].price[j]=100 + rand()%100;  
  82. //printf(" %d    %d\n",M[i].price[j],M[i].bprice[j]);  
  83.         }  
  84.     }  
  85. /*向服务器端发送数据报*/  
  86.     int t;  
  87.   
  88.     char msg[1024];  
  89.   
  90.             for(i=0;i<100;i++)  
  91.         {  
  92.   
  93.                for(j=0;j<3;j++)  
  94.             {  
  95.              if(j==0)  
  96.                    {  
  97.          
  98.             sprintf(msg,"%d",M[i].code);//转化成字符串,发送code  
  99.              
  100.             n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  101.              
  102.             usleep(10000);  
  103. //发送失败                 
  104.                 if(n<0)  
  105.             {  
  106.                 printf("send code error!");  
  107.             }  
  108.              
  109.             }  
  110.                 else if(j==1)  
  111.             {  
  112.                 for(t=0;t<10;t++)  
  113.                  {  
  114.                 sprintf(msg,"%d",M[i].bprice[t]);//发送bprice  
  115.                  
  116.                 n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  117.          
  118. //发送失败                 
  119.                     if(n<0)  
  120.                    {  
  121.                     printf("send bprice error!");  
  122.                    }  
  123.                   }  
  124.             }  
  125.                 else if(j==2)  
  126.             {  
  127.                     for(t=0;t<10;t++)  
  128.                 {  
  129.                  
  130.                      printf("%s A00%d :000000%d:000000%d\n","A111",M[i].code,M[i].bprice[t],M[i].price[t]);  
  131.                      
  132.                     sprintf(msg,"%d",M[i].price[t]);//发送price  
  133.                  
  134.                 n=sendto(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  135. //发送失败                 
  136.                     if(n<0)  
  137.                    {  
  138.                     printf("send price error!");  
  139.                    }  
  140.              
  141.                        }  
  142.             }     
  143.               }  
  144.     }  
  145.   
  146.     printf("stock A send over!\n");  
  147.     usleep(1000000);  
  148.   
  149. /股票C111  
  150.   
  151.     struct stock_c  
  152.     {  
  153.      
  154.         int code;          //股票代码  
  155.         int bprice[10];    //标价  
  156.         int price[10];     //现价  
  157.     };  
  158.   
  159.     struct stock_c N[100];  
  160.   
  161.   
  162. ///初始化200只股票///  
  163.         for(i=0;i<100;i++)  
  164.     {  
  165. //生成code     
  166.         N[i].code=100+i;  
  167. //printf("%d\n",M[i].code);///打印股票代码  
  168.   
  169. ///生成价格//  
  170.             for(j=0;j<10;j++)  
  171.         {  
  172.             N[i].bprice[j] = 100 + rand()%100;  
  173.             N[i].price[j]=100 + rand()%100;  
  174. //printf(" %d    %d\n",M[i].price[j],M[i].bprice[j]);  
  175.         }  
  176.     }  
  177.   
  178. char ms[1024];  
  179.   
  180.         for(i=0;i<100;i++)  
  181.     {  
  182.   
  183.                for(j=0;j<3;j++)  
  184.               {  
  185.            if(j==0)  
  186.                    {  
  187.             sprintf(ms,"%d",N[i].code);//转化成字符串 发送code  
  188.              
  189.             m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  190.              
  191.             usleep(10000);  
  192. //发送失败         
  193.                 if(m<0)  
  194.                 {  
  195.                 printf("send code error!");  
  196.                 }  
  197.              
  198.             }  
  199.                 else if(j==1)  
  200.             {  
  201.                 for(t=0;t<10;t++)  
  202.                 {  
  203.                 sprintf(ms,"%d",N[i].bprice[t]);//转化成字符串 发送标价  
  204.                  
  205.                 m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  206.                            
  207.                 }  
  208.                  
  209. //发送失败         
  210.                 if(m<0)  
  211.                 {  
  212.                 printf("send bprice error!");  
  213.                 }  
  214.             }  
  215.                 else if(j==2)  
  216.             {  
  217.                 for(t=0;t<10;t++)  
  218.                 {             
  219.                   printf("%s A00%d :0000000%d:0000000%d\n","C111",N[i].code,N[i].bprice[t],N[i].price[t]);  
  220.                 sprintf(ms,"%d",N[i].price[t]);//转化成字符串 发送现价  
  221.                 m=sendto(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  
  222.              
  223.                       }  
  224.             }     
  225.         }  
  226. }     
  227.     printf("stock C send over!\n");  
  228.      
  229.     close(sockfd);  
  230.   
  231.     return 0;  
  232.   
  233. }  

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

[cpp]  view plain  copy
 print ?
  1. #include "stock.h"  
  2. #define MYPORT 8866 /*定义端口为8866*/  
  3.   
  4.     int main(void)  
  5. {  
  6.     int sockfd;    //创建socket  
  7.     int n,m;         //接收socket  
  8.     int addrlen; //地址长度  
  9.     int i,j,t;       
  10.   
  11. //服务器地址信息  
  12.   
  13.     struct sockaddr_in server_addr;  
  14.      
  15. //客户端地址信息  
  16.      
  17.     struct sockaddr_in client_addr;    
  18.   
  19. //接收数据struct     
  20.   
  21.      struct stock_a     
  22.      {  
  23.           int mtype;         //消息类型  
  24.         int code;         //code  
  25.         int bprice[10];    //标价  
  26.         int price[10];    //现价  
  27.     };  
  28.   
  29.     struct stock_a M[100];  
  30.   
  31. //创建数据报套接字     
  32.      
  33.     sockfd=socket(AF_INET,SOCK_DGRAM,0);  
  34.          
  35.         if(sockfd<0)  
  36.     {     
  37.         printf("Socket Error:%s\n",strerror(errno));  
  38.   
  39.         exit(1);  
  40.     }  
  41. // 服务器端填充 sockaddr_in结构  
  42.   
  43.     bzero(&server_addr,sizeof(struct sockaddr_in));  
  44.   
  45.     server_addr.sin_family=AF_INET;  
  46.   
  47.     server_addr.sin_addr.s_addr=htonl(INADDR_ANY);  
  48.   
  49.     server_addr.sin_port=htons(MYPORT);  
  50.   
  51. //绑定套接字  
  52.   
  53.         if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)  
  54.     {  
  55.     printf("Bind Error:%s\n",strerror(errno));  
  56.   
  57.     exit(1);  
  58.   
  59.     }  
  60.     addrlen=sizeof(struct sockaddr);  
  61.   
  62.     printf("The server is waiting datas:\n");  
  63.   
  64. // 接收客户端数据报  
  65.      
  66.     char msg[100];  
  67.      
  68.         for(i=0;i<100;i++)  
  69.     {  
  70.             for(j=0;j<3;j++)  
  71.         {     
  72.             if(j==0)  
  73.                {  
  74. //接收数据code              
  75.              n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);  
  76. // 将字符串转为整形     
  77.             M[i].code = atoi(msg);  
  78. //接送数据失败  
  79.                     if(n<0)  
  80.                 {  
  81.                 printf("receive code error!");  
  82.                 }  
  83.      
  84.         }  
  85.                 else if(j==1)  
  86.             {    
  87.                     for(t=0;t<10;t++)  
  88.                 {  
  89. //接收数据bprice  
  90.                  n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);  
  91. // 将字符串转为整形                 
  92.                 M[i].bprice[t] = atoi(msg);  
  93.                    }  
  94. //接送数据失败  
  95.                         if(n<0)  
  96.                     {  
  97.                         printf("receive bprice error!");  
  98.                     }  
  99.             }  
  100.                 else if(j==2)  
  101.             {    
  102.                        for(t=0;t<10;t++)  
  103.                    {  
  104. //接收数据price     
  105.                 n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client_addr,&addrlen);  
  106. // 将字符串转为整形                     
  107.                  M[i].price[t] = atoi(msg);  
  108. //打印接收到的数据                
  109.                  printf("%s A00%d:0000000%d:0000000%d\n","A111",M[i].code,M[i].bprice[t],M[i].price[t]);  
  110.         
  111.                      }  
  112. //接送数据失败  
  113.                         if(n<0)  
  114.                     {  
  115.                         printf("receive price error!");  
  116.                     }  
  117.             }  
  118.         }     
  119. }  
  120. //stock A 接收完毕  
  121.   
  122. printf("receive Stock A over!\n");  
  123.   
  124. usleep(1000000);  
  125. /  
  126. //接收数据struct a  
  127. /  
  128.          struct stock_c  
  129.     {  
  130.         int mtype;         //消息类型  
  131.         int code;         //code  
  132.         int bprice[10];    //标价  
  133.         int price[10];    //现价  
  134.     };  
  135.   
  136.     struct stock_c N[100];  
  137.   
  138.     char ms[100];  
  139.   
  140.         for(i=0;i<100;i++)  
  141.     {  
  142.             for(j=0;j<3;j++)  
  143.         {  
  144.             if(j==0)  
  145.                {  
  146. //接收数据code              
  147.              m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);  
  148. // 将字符串转为整形  
  149.             N[i].code = atoi(ms);  
  150. //接送数据失败          
  151.                      if(m<0)  
  152.                 {  
  153.                 printf("receive Stock C code error!");  
  154.                 }          
  155.            }  
  156.            else if(j==1)  
  157.         {    
  158.                 for(t=0;t<10;t++)  
  159.             {  
  160. //接收数据bprice  
  161.            m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);  
  162. // 将字符串转为整形  
  163.            N[i].bprice[t] = atoi(ms);  
  164. //接送数据失败          
  165.                      if(m<0)  
  166.                 {  
  167.                 printf("receive Stock C bprice error!");  
  168.                 }  
  169.                }  
  170.         }  
  171.             else if(j==2)  
  172.         {    
  173.                  for(t=0;t<10;t++)  
  174.             {  
  175. //接收数据price             
  176.              m=recvfrom(sockfd,ms,sizeof(ms),0,(struct sockaddr *)&client_addr,&addrlen);  
  177. // 将字符串转为整形  
  178.             N[i].price[t] = atoi(ms);  
  179. //接送数据失败          
  180.                      if(m<0)  
  181.                 {  
  182.                 printf("receive Stock C price error!");  
  183.                 }  
  184. //打印接收到的数据  
  185.           printf("%s A00%d:0000000%d:0000000%d\n","C111",N[i].code,N[i].bprice[t],N[i].price[t]);  
  186.                 }  
  187.         }  
  188.     }  
  189.      
  190. }  
  191.      printf("receive Stock C over!\n");     
  192.   
  193. //关闭套接字  
  194. close(sockfd);  
  195.   
  196. printf("Message Queue Stock A Send!\n");     
  197.   
  198. //Message queue 消息队列发送  
  199. //stock a  
  200.          key_t key;  
  201.         int msgid;  
  202.         int ret;  
  203.   
  204.        struct stock_a tr;  
  205.                        
  206.         key=ftok("/tmp/1",'c');  
  207.         printf("key =[%d]\n",key);  
  208. //创建消息队列          
  209.         msgid=msgget(key,IPC_CREAT|0666); //通过文件对应  
  210.   
  211.             if(msgid==-1)  
  212.                {  
  213.                 printf("create error\n");  
  214.                 return -1;  
  215.               }  
  216.      for(i=0;i<100;i++)  
  217. {     
  218.         tr.code = M[i].code;  
  219.         tr.mtype = 100+i; //设置消息类型  
  220.          
  221.         for(j=0;j<10;j++)  
  222.              {  
  223.             tr.bprice[j]=M[i].bprice[j];  
  224.             tr.price[j]=M[i].price[j];  
  225.             }  
  226. //发送消息队列             
  227.         ret=msgsnd(msgid,&tr,sizeof(tr),IPC_NOWAIT);  
  228.        
  229.         if(ret==-1)  
  230.             {  
  231.          printf("send message err\n");  
  232.                }  
  233. }  
  234.     printf("Message Queue Stock C Send!\n");  
  235.   
  236. //stock c  
  237.         struct stock_c cr;  
  238.          
  239.        for(i=0;i<100;i++)  
  240.        {  
  241.         cr.code = N[i].code;  
  242.         cr.mtype = 200+i;   //设置消息类型  
  243.         for(j=0;j<10;j++)  
  244.              {  
  245.         cr.bprice[j]=N[i].bprice[j];  
  246.         cr.price[j]=N[i].price[j];  
  247.             }  
  248. //发送消息队列             
  249.         ret=msgsnd(msgid,&cr,sizeof(cr),IPC_NOWAIT);  
  250.        
  251.          if(ret==-1)  
  252.                {  
  253.          printf("send message err\n");       
  254.             }  
  255.          }      

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值