栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言UDP传输系统源码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言UDP传输系统源码

 本文实例为大家分享了C语言UDP传输系统的具体代码,供大家参考,具体内容如下


#pragma comment( lib, "ws2_32.lib" )

#include 
#include 
#include 
#include 



#define MCASTADDR   "224.3.5.8"
#define MCASTPORT   25000
#define BUFSIZE    1024
#define MCOUNT    10


#define BCASTPORT   5050
#define BCOUNT    10


SOCKETsocketBro;
SOCKETsocketRec;
struct sockaddr_in addrBro;
struct sockaddr_in addrRec;
BOOL broadSendFlag;
BOOL broadFlag;

DWORDbCount;
DWORDbcastAddr;
shortbPort;


SOCKETsocketMul;
SOCKETsockJoin;
struct sockaddr_in addrLocal;
struct sockaddr_in addrMul;

BOOL multiSendFlag;
BOOL bLoopBack;  
BOOL multiFlag;

DWORDdwInterface; 
DWORDdwMulticastGroup;
DWORDmCount;     
shortmPort;      


void initial();
void GetArgments(int argc, char **argv);

void userHelpAll();
void userHelpBro();
void userHelpMul();

void broadcastSend();
void broadcastRec();

void mulControl();
void multicastSend();
void multicastRec();


void initial()
{
  
  bPort = BCASTPORT;
  bCount = BCOUNT;
  bcastAddr = INADDR_BROADCAST;
  broadSendFlag = FALSE;
  broadFlag = FALSE;
  multiFlag = FALSE;

  
  dwInterface = INADDR_ANY;
  dwMulticastGroup = inet_addr(MCASTADDR);
  mPort = MCASTPORT;
  mCount = MCOUNT;
  multiSendFlag = FALSE;
  bLoopBack = FALSE;
}


void GetArgments(int argc, char **argv)
{
  int i;
  
  if(argc<=1)
  {
    userHelpAll();
    return ;
  }
  
  if(argv[1][0]=='-'&&argv[1][1]=='b')
  {
    
    broadFlag = TRUE;
    for(i=2; i < argc ;i++)
   {
      if (argv[i][0] == '-')
   {
 switch (tolower(argv[i][1]))
     {
   
  case 's': 
     broadSendFlag = TRUE;
 break;
   
  case 'h':
     if (strlen(argv[i]) > 3)
bcastAddr = inet_addr(&argv[i][3]);
 break;
   
  case 'p':
     if (strlen(argv[i]) > 3)
bPort = atoi(&argv[i][3]);
 break;
   
  case 'n': 
     bCount = atoi(&argv[i][3]);
 break;
   
  default:
      {
      userHelpBro();
      ExitProcess(-1);
      }
 break;
     }
   }
   }
    return ;
  }

  
  if(argv[1][0]=='-'&&argv[1][1]=='m')
  {
    
    multiFlag = TRUE;
    for(i=2; i < argc ;i++)
   {
      if (argv[i][0] == '-')
   {
 switch (tolower(argv[i][1]))
     {
   
  case 's': 
     multiSendFlag = TRUE;
 break;
   
  case 'h': 
     if (strlen(argv[i]) > 3)
dwMulticastGroup = inet_addr(&argv[i][3]);
 break;
   
  case 'i': 
     if (strlen(argv[i]) > 3)
dwInterface = inet_addr(&argv[i][3]);
 break;
   
  case 'p': 
     if (strlen(argv[i]) > 3)
mPort = atoi(&argv[i][3]);
 break;
   
  case 'l': 
     bLoopBack = TRUE;
 break;
   
  case 'n':
     mCount = atoi(&argv[i][3]);
 break;
   
  default:
    userHelpMul();
 break;
     }
   }
   }
  
  }
  return;
}


void userHelpAll()
{
  printf("Please choose broadcast[-b] or multicast[-m] !n"); 
  printf("userHelpAll: -b [-s][p][-h][-n] | -m[-s][-h][-p][-i][-l][-n]n");
  userHelpBro();
  userHelpMul();
}


void userHelpBro()
{
  printf("Broadcast: -b -s:str -p:int -h:str -n:intn");
  printf("      -b   Start the broadcast program.n");
  printf("      -s   Act as server (send data); otherwisen");
  printf("  receive data. Default is receiver.n");
  printf("      -p:int Port number to usen ");
  printf("  The default port is 5050.n");
  printf("      -h:str The decimal broadcast IP address.n");
  printf("      -n:int The Number of messages to send/receive.n");
  printf("  The default number is 10.n");
}


void userHelpMul()
{
  printf("Multicast: -m -s -h:str -p:int -i:str -l -n:intn");
  printf("      -m   Start the multicast program.n");
  printf("      -s   Act as server (send data); otherwisen");
  printf("   receive data. Default is receiver.n");
  printf("      -h:str The decimal multicast IP address to joinn");
  printf("   The default group is: %sn", MCASTADDR);
  printf("      -p:int Port number to usen");
  printf("   The default port is: %dn", MCASTPORT);
  printf("      -i:str Local interface to bind to; by default n");
  printf("   use INADDRY_ANYn");
  printf("      -l   Disable loopbackn");
  printf("      -n:int Number of messages to send/receiven");
  ExitProcess(-1);
}


void broadcastSend()
{
  
  char *smsg="The message received is from sender!";
  BOOL opt=TRUE;
  int nlen=sizeof(addrBro);
  int ret;
  DWORD i=0;
  
  
  socketBro=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
  
  if(socketBro==INVALID_SOCKET)
  {
    printf("Create socket failed:%dn",WSAGetLastError());
    WSACleanup();
    return;
  }
  
  
  addrBro.sin_family=AF_INET;
  addrBro.sin_addr.s_addr=bcastAddr;
  addrBro.sin_port=htons(bPort);
  
  
  if (setsockopt(socketBro,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,
sizeof(opt))==SOCKET_ERROR)
  
  {
    printf("setsockopt failed:%d",WSAGetLastError());
    closesocket(socketBro);
    WSACleanup();
    return;
  }
  
  while(in", recvbuf,inet_ntoa(from.sin_addr));
   }
  
  closesocket(socketMul);
  WSACleanup();
}


int main(int argc, char **argv)
{
  WSADATA wsd;

  initial();
  GetArgments(argc, argv);

  
  if (WSAStartup(MAKEWORd(2, 2), &wsd) != 0)
  {
    printf("WSAStartup() failedn");
    return -1;
  }

  
  if(broadFlag)
  {
    
    if(broadSendFlag)
   {
      broadcastSend();
      return 0;
   }
    
    else
   {
      broadcastRec();
      return 0;
   }
  }

  
  if(multiFlag)
  {
    
    if(multiSendFlag) 
   {
      multicastSend();
      return 0;
    }
    
    else  
   {
      multicastRec();
      return 0;
   }
  }
  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/62936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号