流媒体网欢迎您!
全世界的网络联合起来,流媒体世界一定能实现!
 
   
IPTV | P2P流媒体 | 移动流媒体 | 数字家庭 | 流媒体宽频 | 网络流媒体 | 安防监控 | 视频会议 | VIP会员 | 行业专题 | 业内专访
 
 
 
您现在的位置: 流媒体网 >> P2P >> 程序源码 >> P2P正文
 
P2P之UDP穿透NAT的原理与实现(附源代码)
作者:shooting…  来源:p2pcn  发布时间:2006-4-25 11:11:00

sp;     printf("create socket error");
  throw Exception("");
 }
 return sock;
}

stUserListNode GetUser(char *username)
{
 for(UserList::iterator UserIterator=ClientList.begin();
      UserIterator!=ClientList.end();
       ++UserIterator)
 {
  if( strcmp( ((*UserIterator)->userName), username) == 0 )
   return *(*UserIterator);
 }
 throw Exception("not find this user");
}

int main(int argc, char* argv[])
{
 try{
  InitWinSock();
 
  SOCKET PrimaryUDP;
  PrimaryUDP = mksock(SOCK_DGRAM);

  sockaddr_in local;
  local.sin_family=AF_INET;
  local.sin_port= htons(SERVER_PORT);
  local.sin_addr.s_addr = htonl(INADDR_ANY);
  int nResult=bind(PrimaryUDP,(sockaddr*)&local,sizeof(sockaddr));
  if(nResult==SOCKET_ERROR)
   throw Exception("bind error");

  sockaddr_in sender;
  stMessage recvbuf;
  memset(&recvbuf,0,sizeof(stMessage));

  // 开始主循环.
  // 主循环负责下面几件事情:
  // 一:读取客户端登陆和登出消息,记录客户列表
  // 二:转发客户p2p请求
  for(;;)
  {
   int dwSender = sizeof(sender);
   int ret = recvfrom(PrimaryUDP, (char *)&recvbuf, sizeof(stMessage), 0, (sockaddr *)&sender, &dwSender);
   if(ret <= 0)
   {
    printf("recv error");
    continue;
   }
   else
   {
    int messageType = recvbuf.iMessageType;
    switch(messageType){
    case LOGIN:
     {
      //  将这个用户的信息记录到用户列表中
      printf("has a user login : %s\n", recvbuf.message.loginmember.us

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

    
责任编辑:playcat911

发表评论】【告诉好友】【打印此文】【关闭窗口收藏此页到365Key   

  • 上一篇P2P:
  • 下一篇P2P: 没有了
  •  
    相关新闻
    试论当前P2P发展现状与运营方案
    P4P异军突起,P2P即将过时?
    网络电视正在改变中外互联网格局
    P2P应用调查:Gnutella用户最多 BT其次
    LimeWire仍为最流行P2P软件  µTorrent紧追