⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 这是TCP/IP协议组播的实现代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 244   1              if(video_revhandle ==  0x0FFFF)
 245   1              puts("\r\n Failed to create receive video UDP socket \r\n");
 246   1          else
 247   1              puts("\r\n Succeed to create receive video UDP socket \r\n");
 248   1      
 249   1              if(bind(video_revhandle,&rev_udp_video,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 250   1              printf(" successully bind receive video address and port - %u\r\n",REV_VIDEO_PORT);
 251   1          else
 252   1              printf(" failed to bind receive video address and port \r\n");
 253   1      
 254   1              /******************创建UDP视频接收连接************************/
 255   1      
 256   1      
 257   1              /******************创建UDP音频接收连接************************/
 258   1      
 259   1              memset(&rev_udp_audio, 0, sizeof(struct sockaddr));
 260   1          rev_udp_audio.sin_addr[12] = static_ip[0];
 261   1          rev_udp_audio.sin_addr[13] = static_ip[1];
 262   1          rev_udp_audio.sin_addr[14] = static_ip[2];
 263   1          rev_udp_audio.sin_addr[15] = static_ip[3];
 264   1      
 265   1          rev_udp_audio.sin_port = REV_G711_PORT;
 266   1      
 267   1              g711_revhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP接收命令字连接
 268   1      
 269   1              if(g711_revhandle ==  0x0FFFF)
 270   1              puts("\r\n Failed to create receive audio UDP socket \r\n");
 271   1          else
 272   1              puts("\r\n Succeed to create receive audio UDP socket \r\n");
 273   1              
 274   1      
 275   1              if(bind(g711_revhandle,&rev_udp_audio,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 276   1          {   
 277   2                      printf(" successully bind receive audio address and port - %u\r\n",REV_G711_PORT);
 278   2          }
 279   1              else
 280   1              {
 281   2              printf(" failed to bind receive audio address and port \r\n");
 282   2              }
 283   1      
 284   1              /******************创建UDP音频接收连接************************/
 285   1      
 286   1              
 287   1              /******************创建UDP命令接收连接************************/
 288   1      
 289   1              memset(&rev_udp_command, 0, sizeof(struct sockaddr));
 290   1          rev_udp_command.sin_addr[12] = static_ip[0];
 291   1          rev_udp_command.sin_addr[13] = static_ip[1];
 292   1          rev_udp_command.sin_addr[14] = static_ip[2];
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 6   

 293   1          rev_udp_command.sin_addr[15] = static_ip[3];
 294   1      
 295   1          rev_udp_command.sin_port = REV_COMMAND_PORT;
 296   1      
 297   1              command_revhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP接收命令字连接
 298   1      
 299   1              if(command_revhandle ==  0x0FFFF)
 300   1              puts("\r\n Failed to create receive command UDP socket \r\n");
 301   1          else
 302   1              puts("\r\n Succeed to create receive command UDP socket \r\n");
 303   1      
 304   1              if(bind(command_revhandle,&rev_udp_command,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 305   1              printf(" successully bind receive command address and port - %u\r\n",REV_COMMAND_PORT);
 306   1          else
 307   1              printf(" failed to bind receive command address and port \r\n");
 308   1              
 309   1              syn_setDatagramAddress(command_revhandle, 0, &rev_udp_command); 
 310   1      
 311   1              /******************创建UDP命令接收连接************************/
 312   1      
 313   1      
 314   1              /******************** 创建接收连接 ***************************/ 
 315   1              
 316   1              start_leave();
 317   1      
 318   1              task_entercritsection();   
 319   1          
 320   1              result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 321   1          
 322   1              if (result==0x0FFFF)//创建任务失败
 323   1          {
 324   2              task_leavecritsection();
 325   2              puts("Attempt to fork failed\r\n");
 326   2              return;
 327   2          }
 328   1              else if (result==0)//发送线程
 329   1          {
 330   2              while (1)
 331   2                      {
 332   3                              temp = *(dual_ip + 0x44);
 333   3                              if(temp == 0x01)
 334   3                              {
 335   4                                      task_entercritsection();
 336   4                                      para_l = *(dual_ip + 0x45);
 337   4                                      para_h = *(dual_ip + 0x46);
 338   4                                      analyse_current_state(para_l,para_h);
 339   4                                      *(dual_ip + 0x44) = 0;
 340   4                                      task_leavecritsection();
 341   4                              }
 342   3      
 343   3                              temp = ((*rd_fifo_ef) & 0x01);
 344   3                              if(temp == 1)//检测视频FIFO是否为空
 345   3                              {
 346   4                                      dp_read_video();
 347   4                                      if(send_video_flag != 0xff)
 348   4                                      {
 349   5                                              syn_sendto(video_sendhandle, 1472, send_addr_video);//UDP发送视频数据
 350   5                                      }
 351   4                              }
 352   3      
 353   3                              temp = ((*rd_fifo_hf) & 0x01);
 354   3                              if(temp == 0)//检测音频FIFO是否半满
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 7   

 355   3                              {
 356   4                                      dp_read_audio();//读取音频数据
 357   4                                      if(send_audio_flag != 0xff)
 358   4                                      {
 359   5                                              syn_sendto(g711_sendhandle, 1024, send_addr_audio);//UDP发送音频数据
 360   5                                      }
 361   4                              }
 362   3      
 363   3                              temp = ((*dual_rev) & 0x01);
 364   3                              if(temp == 0x01)//判断是否有命令字需要发送
 365   3                              {                                       
 366   4                                      command_length = *(dual_rev + 1);
 367   4                                      for(i = 0; i < command_length;i++)
 368   4                                      {
 369   5                                              *(send_addr_command + i + 5) = (*(dual_rev + 2 + i) & 0xff);
 370   5                                      }
 371   4                                      *dual_rev = 0;
 372   4                                      command_length = command_length + 5;
 373   4                                      *(send_addr_command) = command_length;//将从双口RAM中取出的命令字打包
 374   4                                      syn_sendto(command_sendhandle,command_length,send_addr_command);//UDP发送命令字
 375   4                              }
 376   3                              if(rev_video_flag == 0xff)
 377   3                              {
 378   4                                      task_wait(0, 0, 18);//线程挂起,进入等待
 379   4                              }
 380   3                              else
 381   3                              {
 382   4                                      task_wait(0, 0, 16);//线程挂起,进入等待
 383   4                              }
 384   3                      }
 385   2          }
 386   1          else 
 387   1          {
 388   2                      command_result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 389   2                      if(command_result == 0xffff)
 390   2                      {
 391   3                              puts("Attempt to fork failed\r\n");
 392   3                      return;
 393   3                      }
 394   2                      else if(command_result == 0)//接收视频数据线程
 395   2                      {
 396   3                              while (1)
 397   3                              {
 398   4                              rev_length_video = syn_recvfrom(video_revhandle,1472,rev_addr_video);//UDP接收视频数据
 399   4                                      if(rev_length_video == 1472)
 400   4                                      {
 401   5                                              dp_write_video();
 402   5                                      }
 403   4                              }
 404   3                      }
 405   2                      else
 406   2                      {
 407   3                              audio_result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 408   3                              if(audio_result == 0xffff)
 409   3                              {
 410   4                                      puts("Attempt to fork failed\r\n");
 411   4                              return;
 412   4                              }
 413   3                              else if(audio_result == 0)//接收音频线程
 414   3                              {
 415   4                                      while(1)
 416   4                                      {
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 8   

 417   5                                              rev_length_audio = syn_recvfrom(g711_revhandle,1024,rev_addr_audio);//UDP音频接收
 418   5                                              //rev_length_audio = recvfrom(g711_revhandle,rev_addr_audio,1024,0,&temp_addr,sizeof(struct sockaddr)
             -);//UDP音频接收
 419   5                                              if(rev_length_audio == 1024)
 420   5                                              {
 421   6                                                      dp_write_audio();
 422   6                                                      //printf("IP : %bu \r\n", temp_addr.sin_addr[15]);
 423   6                                                      //temp_addr.sin_addr[15] = 0;
 424   6                                              }
 425   5                                      }
 426   4                              }
 427   3                              else//接收命令字线程
 428   3                              {
 429   4                                      task_leavecritsection();
 430   4                                      while (1)
 431   4                                      {
 432   5                                              rev_length_command = syn_recvfrom(command_revhandle,210, rev_addr_command);//UDP接收
 433   5                                              if((rev_length_command < 210) && (rev_length_command > 0))
 434   5                                              {
 435   6                                                      moveto_buf();//将网络接收到的命令字放入接收缓冲区
 436   6                                                      rev_length_command = 0;
 437   6                                                      while(head_r != tail_r)
 438   6                                                      {
 439   7                                                              send_command();
 440   7                                                      }
 441   6                                              }
 442   5                                      }
 443   4                              }
 444   3                      }
 445   2              }
 446   1          while(1)
 447   1              {
 448   2              }
 449   1      }
 450          
 451          void start_leave()
 452          {
 453   1              for (i=0;i<18;i++)
 454   1              {
 455   2              rev_multi_video.sin_addr[i] = 0;
 456   2              }
 457   1              rev_multi_video.sin_addr[12] = rev_para_video[0][0];
 458   1          rev_multi_video.sin_addr[13] = rev_para_video[0][1];
 459   1          rev_multi_video.sin_addr[14] = rev_para_video[0][2];
 460   1              rev_multi_video.sin_addr[15] = rev_para_video[0][3];
 461   1              rev_multi_video.sin_port = REV_VIDEO_PORT;
 462   1              if(leave(video_revhandle,&rev_multi_video,sizeof(struct sockaddr)) == 0)
 463   1              {
 464   2                      puts("leave from rev_multi_video success! - 0");
 465   2              }
 466   1              else
 467   1              {
 468   2                      puts("leave from rev_multi_video failure! - 0");
 469   2              }
 470   1      
 471   1              for (i=0;i<18;i++)
 472   1              {
 473   2              rev_multi_video.sin_addr[i] = 0;
 474   2              }
 475   1              rev_multi_video.sin_addr[12] = rev_para_video[1][0];
 476   1          rev_multi_video.sin_addr[13] = rev_para_video[1][1];
 477   1          rev_multi_video.sin_addr[14] = rev_para_video[1][2];
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 9   

 478   1              rev_multi_video.sin_addr[15] = rev_para_video[1][3];
 479   1              rev_multi_video.sin_port = REV_VIDEO_PORT;
 480   1              if(leave(video_revhandle,&rev_multi_video,sizeof(struct sockaddr)) == 0)
 481   1              {
 482   2                      puts("leave from rev_multi_video success! - 1");
 483   2              }
 484   1              else
 485   1              {
 486   2                      puts("leave from rev_multi_video failure! - 1");
 487   2              }
 488   1      
 489   1              for (i=0;i<18;i++)
 490   1              {
 491   2              rev_multi_audio.sin_addr[i] = 0;
 492   2              }
 493   1              rev_multi_audio.sin_addr[12] = rev_para_audio[0][0];
 494   1          rev_multi_audio.sin_addr[13] = rev_para_audio[0][1];
 495   1          rev_multi_audio.sin_addr[14] = rev_para_audio[0][2];
 496   1              rev_multi_audio.sin_addr[15] = rev_para_audio[0][3];
 497   1              rev_multi_audio.sin_port = REV_G711_PORT;
 498   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 499   1              {
 500   2                      puts("leave from rev_multi_audio success! - 0");
 501   2              }
 502   1              else
 503   1              {
 504   2                      puts("leave from rev_multi_audio failure! - 0");
 505   2              }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -