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

📄 basestream.cpp

📁 组播发送测试网络程序,服务器端
💻 CPP
字号:
// BaseStream.cpp: implementation of the CBaseStream class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BaseStream.h"
#include "MultiSock_s.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBaseStream::CBaseStream()
{m_zStreamStatus=S_S_Idle;
 m_hBeginPlay=m_hPausePlay=m_hStopPlay=m_hTerminateThread=m_hThread=NULL;
 m_fStreamBitrate=0;
// TRACE("Create Base Stream\n");
}

CBaseStream::~CBaseStream()
{
 Close();
}

DWORD CBaseStream::StreamThread()
{  return BS_OK;
}

int CBaseStream::Create(SOCKADDR_IN myAddr, SOCKADDR_IN multiAddr)
{ //TRACE("Create base Thread\n");

  //int nRet=m_MultiSock.Startup(myAddr,multiAddr);
	TRACE("sdsd");
//  int nRet=m_MultiSock.Startup("226.8.8.8",9002,"",9002,1);
 int nRet;
	if(nRet==INVALID_SOCKET)
  { 
    return BS_FAIL;

  }
    m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_hBeginPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_hPausePlay = CreateEvent(NULL,TRUE,FALSE,NULL);
    m_hStopPlay = CreateEvent(NULL,TRUE,FALSE,NULL);

	m_hThread = CreateThread(NULL,0,InitialThread,this,0,&m_dwThreadId);
	m_zStreamStatus=S_S_Inited;
 
    return BS_OK;
}

void CBaseStream::Start()
{
 if(m_zStreamStatus==S_S_Running) return ;		
 SetEvent(m_hBeginPlay);
}

void CBaseStream::Pause()
{
 if(m_zStreamStatus!=S_S_Running) return ;		
  SetEvent(m_hPausePlay);
}

void CBaseStream::Stop()
{
 if(m_zStreamStatus!=S_S_Running) return ;
  SetEvent(m_hStopPlay);
}

void CBaseStream::Close()
{
 if(m_zStreamStatus==S_S_Idle||m_zStreamStatus==S_S_Closed) 
		return;
	SetEvent(m_hTerminateThread);
if (WaitForSingleObject(m_hThread,100)!=WAIT_OBJECT_0){
	TerminateThread(m_hThread,CLOSETHREADCODE);
	}
   
  PubCloseHandle(m_hTerminateThread);
  PubCloseHandle(m_hBeginPlay);
  PubCloseHandle(m_hPausePlay);
  PubCloseHandle(m_hStopPlay);
  
   if(m_nSockType==2)
	   m_AsyMultiSocket.LeaveGroup();
   else
	   m_MultiSock.Close();
   
   m_zStreamStatus=S_S_Idle;
}

Stream_Status CBaseStream::GetStreamStatus()
{
 return m_zStreamStatus;
}

float CBaseStream::GetStreamBitrate()
{
 return m_fStreamBitrate;
}

int CBaseStream::SendData(LPVOID lpBuf, int iSize)
{if(m_nSockType==2)
 return m_AsyMultiSocket.Send(lpBuf,iSize);
else
 return m_MultiSock.SendData(lpBuf,iSize);
}

int CBaseStream::Create(char *strMultiIp, char *strLocapIP, 
						DWORD dwport, int nttl)
{
 
  SOCKADDR_IN m_HostAddr,  multiAddr;
  int nRet;

 m_HostAddr.sin_family=multiAddr.sin_family=AF_INET;
 if(g_bPortIschanged){
	 
   m_HostAddr.sin_port=INADDR_ANY;
   multiAddr.sin_port=htons(dwport);
 }

   else
   {
	   m_HostAddr.sin_port=INADDR_ANY;
	   multiAddr.sin_port=dwport; 
   }
  switch(m_nSockType){
	  case 0:/***********bsd 2.0*******************/
      if(strlen(strLocapIP)<=0)
       m_HostAddr.sin_addr.s_addr=INADDR_ANY;
      else
      m_HostAddr.sin_addr.s_addr=inet_addr(strLocapIP);

     
	  multiAddr.sin_addr.s_addr=inet_addr(strMultiIp);

      
	  nRet=m_MultiSock.Startup(m_HostAddr,multiAddr,nttl);          
 

	    break;

      case 1:/***************wsa join***********/ 
      if(strcmp(strLocapIP,"127.0.0.1")==0)
       m_HostAddr.sin_addr.s_addr=INADDR_ANY;
      else
      m_HostAddr.sin_addr.s_addr=inet_addr(strLocapIP);

     
	  multiAddr.sin_addr.s_addr=inet_addr(strMultiIp);

      
	  nRet=m_MultiSock.Startup_(m_HostAddr,multiAddr,nttl);
	    break;
     case 2:
        nRet=m_AsyMultiSocket.JoinGroup(strMultiIp,dwport,nttl,g_bIsLoopBack);
	    break;
  }


  
  
 
 
 
	if(nRet==INVALID_SOCKET)
  { 
    return BS_FAIL;

  }
    m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_hBeginPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_hPausePlay = CreateEvent(NULL,TRUE,FALSE,NULL);
    m_hStopPlay = CreateEvent(NULL,TRUE,FALSE,NULL);

	m_hThread = CreateThread(NULL,0,InitialThread,this,0,&m_dwThreadId);
	m_zStreamStatus=S_S_Inited;
 
    return BS_OK;
}

void CBaseStream::SetSocketType(int ntype)
{

	m_nSockType=ntype;
}

⌨️ 快捷键说明

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