亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serverdlg.cpp

?? 利用rtp庫實現實時語音傳送
?? CPP
字號:
// ServerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Server.h"
#include "ServerDlg.h"
#include <crtdbg.h> //for _ASSERT
#include "string.h"
//JRTP includes

//#include "RTPIPv4Address.h"
//#include "RTPSessionParams.h"
//#include "RTPUDPv4Transmitter.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define MCAST_IP		"239.216.30.54"
#define MCAST_PORT		4000
#define SERVER_PORT		5000
#define LOCAL_IP		"172.16.129.86"

#define MAX_PACKET_SIZE	((1024 * 64) - 1)

/////////////////////////////////////////////////////////////////////////////
// CServerDlg dialog

CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CServerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CServerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CServerDlg, CDialog)
	//{{AFX_MSG_MAP(CServerDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTOPEN, OnButOpen)
	ON_BN_CLICKED(IDC_BUTSTART, OnButStart)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerDlg message handlers

BOOL CServerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	WSADATA	wsaData;
	if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
	{
		return FALSE;
	};
	unsigned long addr = ntohl(inet_addr("172.16.129.86"));
	int nRet;
	nRet = m_rtpSession.Create(10002);
	nRet = m_rtpSession.AddDestination(addr,10000);
	nRet = m_rtpSession.SetMaxPacketSize(60000);
	m_rtpSession.SetDefaultPayloadType(0);
	m_rtpSession.SetDefaultMark(false);
	m_rtpSession.SetDefaultTimeStampIncrement(10);
	m_hPollDataThrd = NULL;
	m_bRunThread = FALSE;
	m_hMediaFile = INVALID_HANDLE_VALUE;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CServerDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CServerDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
/*
void CServerDlg::OnButOpen() 
{
	// TODO: Add your control notification handler code here
	OPENFILENAME  ofn ;
	TCHAR         achFileName[MAX_PATH] ;
	ZeroMemory(achFileName,MAX_PATH);
	// Init the filename buffer with either a filename or *.ifo
	ZeroMemory(&ofn, sizeof(OPENFILENAME)) ;
	ofn.lStructSize = sizeof(OPENFILENAME) ;
	ofn.hwndOwner = m_hWnd ;
	ofn.lpstrTitle = TEXT("Select Media File\0") ;
	ofn.lpstrFilter = TEXT("MPEG Files\0*.*;*.*\0\0") ;
	
	ofn.nFilterIndex = 1 ;
	ofn.lpstrFile = achFileName ;
	ofn.nMaxFile = sizeof(achFileName) ;
	ofn.lpstrFileTitle = NULL ;
	ofn.nMaxFileTitle = 0 ;
	ofn.lpstrInitialDir = NULL ;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY ;
	
	if (!GetOpenFileName(&ofn)) // user specified a file
	{
		return ;
	}

	SetDlgItemText(IDC_CURPLAYING,achFileName);
	if(m_hMediaFile!=INVALID_HANDLE_VALUE)
		CloseHandle(m_hMediaFile);
	m_hMediaFile = CreateFile(achFileName,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,OPEN_EXISTING,0,NULL);
	CURRENCY len;
	len.Lo = GetFileSize(m_hMediaFile,(LPDWORD)&len.Hi);
	m_llMediaLen = len.int64;
}*/
void CServerDlg::OnButOpen() 
{
	// TODO: Add your control notification handler code here
	OPENFILENAME  ofn ;
	TCHAR         achFileName[MAX_PATH] ;
	ZeroMemory(achFileName,MAX_PATH);
	// Init the filename buffer with either a filename or *.ifo
	ZeroMemory(&ofn, sizeof(OPENFILENAME)) ;
	ofn.lStructSize = sizeof(OPENFILENAME) ;
	ofn.hwndOwner = m_hWnd ;
	ofn.lpstrTitle = TEXT("Select Media File\0") ;
	ofn.lpstrFilter = TEXT("Mpeg Files (*.mpg;*.mpeg)|*.mpg; *.mpeg|") ;
	
	ofn.nFilterIndex = 1 ;
	ofn.lpstrFile = achFileName ;
	ofn.nMaxFile = sizeof(achFileName) ;
	ofn.lpstrFileTitle = NULL ;
	ofn.nMaxFileTitle = 0 ;
	ofn.lpstrInitialDir = NULL ;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY ;
	
	if (!GetOpenFileName(&ofn)) // user specified a file
	{
		return ;
	}

	SetDlgItemText(IDC_CURPLAYING,achFileName);
	if(m_hMediaFile!=INVALID_HANDLE_VALUE)
		CloseHandle(m_hMediaFile);
	m_hMediaFile = CreateFile(achFileName,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,OPEN_EXISTING,0,NULL);
	CURRENCY len;
	len.Lo = GetFileSize(m_hMediaFile,(LPDWORD)&len.Hi);
	if(len.Lo>12)
		MessageBox("file ok");
	m_llMediaLen = len.int64;
}
/*
void CServerDlg::OnButOpen() 
{
	CFileDialog  dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
			"Mpeg Files (*.mpg;*.mpeg)|*.mpg; *.mpeg|", NULL);
	if (dlg.DoModal() == IDOK)
	{
		m_strSourceFile = dlg.GetPathName();
		ListenOnConnection();
	}
}
*/
/*
void CServerDlg::OnButStart() 
{
	 int status;
 
  // 獲得接收端的IP地址和端口號
 	unsigned long localIP = inet_addr(LOCAL_IP);
		_ASSERT(localIP != INADDR_NONE);
  // 創建RTP會話
  status = m_rtpSession.Create(SERVER_PORT,localIP);
 // checkerror(status);

//  MessageBox("error1");
	unsigned long intIP = inet_addr(MCAST_IP);
	_ASSERT(intIP != INADDR_NONE);
	intIP = ntohl(intIP); //put in host byt
  // 指定RTP數據接收端
  status = m_rtpSession.AddDestination(intIP, MCAST_PORT);

  // 設置RTP會話默認參數
  m_rtpSession.SetDefaultPayloadType(0);
  m_rtpSession.SetDefaultMark(false);
  m_rtpSession.SetDefaultTimeStampIncrement(10);
	// TODO: Add your control notification handler code here
	if(m_hPollDataThrd != NULL)
		return ;
	DWORD dwThreadId;
	m_hPollDataThrd = CreateThread(NULL,
                     0,
                     PollDataProc,
                     (LPVOID)this,
                     0,
                     &dwThreadId);
	if(!m_hPollDataThrd)
	{
		m_hPollDataThrd = NULL;
		m_bRunThread = FALSE;
		return ;
	}
	m_bRunThread = TRUE;
}
*/
void CServerDlg::OnButStart() 
{
	// TODO: Add your control notification handler code here
	if(m_hPollDataThrd != NULL)
		return ;
	DWORD dwThreadId;
	m_hPollDataThrd = CreateThread(NULL,
                     0,
                     PollDataProc,
                     (LPVOID)this,
                     0,
                     &dwThreadId);
	if(!m_hPollDataThrd)
	{
		m_hPollDataThrd = NULL;
		m_bRunThread = FALSE;
		return ;
	}
	m_bRunThread = TRUE;
}
int CServerDlg::InitDataProc()
{
//  RTPSession m_rtpSession;

  int status;
 
  // 獲得接收端的IP地址和端口號
 	unsigned long localIP = inet_addr(LOCAL_IP);
		_ASSERT(localIP != INADDR_NONE);
  // 創建RTP會話
  status = m_rtpSession.Create(SERVER_PORT,localIP);
 // checkerror(status);
  if(!status)
	  return 0;
//  MessageBox("error1");
	unsigned long intIP = inet_addr(MCAST_IP);
	_ASSERT(intIP != INADDR_NONE);
	intIP = ntohl(intIP); //put in host byt
  // 指定RTP數據接收端
  status = m_rtpSession.AddDestination(intIP, MCAST_PORT);
	  if(!status)
	  return 0;

  // 設置RTP會話默認參數
  m_rtpSession.SetDefaultPayloadType(0);
  m_rtpSession.SetDefaultMark(false);
  m_rtpSession.SetDefaultTimeStampIncrement(10);

  // 發送流媒體數據
 char testBuf[MAX_PACKET_SIZE];
 /*
 while(m_llMediaLen)
 {	
	//SEND a packet
			LONGLONG byteCnt = rand() % sizeof(testBuf);
			m_rtpSession.SendPacket(testBuf, byteCnt);
			LONGLONG m_llMediaLen=m_llMediaLen-byteCnt;

  }*/

  return 1;
}
/*
DWORD WINAPI CServerDlg::PollDataProc(void *pParam)
{
//	RTPSession rtpSession;
	//setup session parameters
	RTPSessionParams sessParams;
	sessParams.SetOwnTimestampUnit(1.0 / 30.0); //30 video frames per second
	sessParams.SetUsePollThread(1); //background thread to call virtual callbacks - set by default, but just to be sure
	sessParams.SetMaximumPacketSize(MAX_PACKET_SIZE);
	//setup transmission parameters
	RTPUDPv4TransmissionParams transParams;
	transParams.SetPortbase(SERVER_PORT);
	//CREATE THE SESSION
	int status = m_rtpSession.Create(sessParams, &transParams);
	if (ReportError(status))
		return; //unable to create the session
	printf("RTP session created with portbase %d\n", SERVER_PORT);

	//SET TRANSMISSION DEFAULTS if we want to use them
	//rtpSession.SetDefaultPayloadType(96);
	//rtpSession.SetDefaultMark(false);
	//rtpSession.SetDefaultTimestampIncrement(160);

	//ADD THE MULTICAST to our destination
	unsigned long intIP = inet_addr(MCAST_IP);
	_ASSERT(intIP != INADDR_NONE);
	intIP = ntohl(intIP); //put in host byte order
	RTPIPv4Address rtpAddr(intIP, MCAST_PORT);
	status = m_rtpSession.AddDestination(rtpAddr);
	if (!ReportError(status)) {
		printf("Transmitting to multicast group %s port %d\n\n", MCAST_IP, MCAST_PORT);
		MessageBox("add");
		char testBuf[MAX_PACKET_SIZE];
		while (1) {
		//	printf("\n_______________________________________________________\nPress Enter key to send data - 'x' to exit\n");
		//	int ch = getchar();
		//	if (tolower(ch) == 'x')
				break;
			//SEND a packet
			int byteCnt = rand() % sizeof(testBuf);
			m_rtpSession.SendPacket(testBuf, byteCnt, 0, false, 10UL);
			printf("%d bytes sent\n", byteCnt);
		}

		//LEAVE THE MULTICAST
		m_rtpSession.DeleteDestination(rtpAddr);
	}
	m_rtpSession.Destroy();
}
*/

DWORD WINAPI CServerDlg::PollDataProc(void *pParam)
{


	CServerDlg *pDlg = (CServerDlg*)pParam;
	int nRet = 0;
//	m_llMediaLen
	while(1)
	{
		nRet = pDlg->m_rtpSession.PollData();

		if (pDlg->m_rtpSession.GotoFirstSourceWithData())
		{
			do

			{
				RTPPacket *pack;
				
				pack = pDlg->m_rtpSession.GetNextPacket();
				pDlg->ProcessQuery((char*)pack->GetPayload(),
						pack->GetPayloadLength());
				delete pack;				
			} while (pDlg->m_rtpSession.GotoNextSourceWithData());
		}
		Sleep(1);
	}
	return 1;
}

BOOL CServerDlg::ProcessQuery(char *pbData,int nLength)
{
	CTRLMSG msg;
	LPBYTE lpBuffer = NULL;
	memcpy(&msg,pbData,sizeof(CTRLMSG));
	DWORD dwGotSize;
	DWORD dwBytesHaveSend = 0;
	DWORD dwBytesToSend = msg.dwBytesToRead;
	switch(msg.msgType) {
	case QUEST_DATA:
		CURRENCY llThePos;
		llThePos.int64= msg.lPos;
		SetFilePointer(m_hMediaFile,llThePos.Lo,&llThePos.Hi,FILE_BEGIN);
		while(dwBytesHaveSend <dwBytesToSend) {
			msg.msgType = REPLY_DATA;
			msg.msgSubType = OTHER;
			msg.lPos = 0;
			msg.dwLength = dwBytesToSend-dwBytesHaveSend > 8192 ? 8192:dwBytesToSend-dwBytesHaveSend;
			lpBuffer = new BYTE[(int)msg.dwLength+sizeof(CTRLMSG)];
			ReadFile(m_hMediaFile,lpBuffer+sizeof(CTRLMSG),msg.dwLength,&dwGotSize,NULL);
			memcpy(lpBuffer,&msg,sizeof(CTRLMSG));
			m_rtpSession.SendPacket(lpBuffer,
				msg.dwLength + sizeof(CTRLMSG));
			Sleep(10);
			delete lpBuffer;
			dwBytesHaveSend += msg.dwLength ;
			//TRACE("Send %d Bytes\n",msg.dwLength);
		}
		break;
	case QUEST_LENGTH:
		//SetMediaLength(m_msg.lPos);
		msg.msgType = REPLY_LENGTH;
		msg.msgSubType = OTHER;
		msg.lPos = m_llMediaLen;
		msg.dwLength = 0;
		m_rtpSession.SendPacket(&msg,sizeof(CTRLMSG));
		break;
	};
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品国产传媒mv男同| 中文字幕久久午夜不卡| 久久这里只有精品6| 亚洲欧美日本韩国| 成人动漫av在线| 日韩欧美国产综合| 亚洲一二三区在线观看| 久久99国产精品久久| 日韩一区二区在线看片| 国产综合色视频| 久久久久久久久久美女| 中文字幕一区二区三区蜜月| 国产美女久久久久| 色综合欧美在线| 国产精品久久久久久久久搜平片| 国产在线精品不卡| 亚洲成人中文在线| 欧美日韩国产精品成人| 美女脱光内衣内裤视频久久影院| 亚洲视频网在线直播| 欧美视频一区二区三区四区 | 国产精品免费视频网站| 99国产欧美另类久久久精品 | 国产精品美女久久久久久| 91精品国产综合久久久蜜臀粉嫩| 日韩极品在线观看| 久久综合狠狠综合久久综合88| 欧美日韩视频在线第一区| 精品伊人久久久久7777人| 日韩主播视频在线| 天天综合色天天综合色h| 久久久久国产精品麻豆ai换脸| 欧美高清视频www夜色资源网| 国产经典欧美精品| 一区二区三区日本| 日韩三级中文字幕| 91精品国产入口在线| 99国产精品一区| 色综合久久久久久久久久久| www..com久久爱| 免费的成人av| 亚洲中国最大av网站| 一区二区三区在线影院| 一区二区久久久| 午夜国产精品影院在线观看| 日韩专区一卡二卡| 久久91精品久久久久久秒播| 韩国精品一区二区| 国产91富婆露脸刺激对白| 午夜电影一区二区| 美女一区二区视频| 黄色成人免费在线| 成人av在线影院| 91在线丨porny丨国产| 91精品91久久久中77777| 国产一区二区三区在线观看免费 | 中文字幕在线一区二区三区| 国产精品久久久久久久久快鸭| **欧美大码日韩| 一二三四社区欧美黄| 亚洲国产一区二区在线播放| 美女性感视频久久| www.亚洲免费av| 欧美三级一区二区| 久久综合九色综合欧美亚洲| 国产精品日产欧美久久久久| 一区二区三区四区亚洲| 视频一区二区中文字幕| 久久99精品国产麻豆婷婷洗澡| 高潮精品一区videoshd| 日本高清不卡视频| 日韩女优制服丝袜电影| 国产精品欧美经典| 性做久久久久久免费观看欧美| 韩国女主播一区二区三区| 97精品久久久午夜一区二区三区| 欧美区一区二区三区| 国产女人18毛片水真多成人如厕| 日韩视频一区二区三区在线播放 | 欧美日韩国产综合一区二区三区 | 91精品一区二区三区在线观看| 久久五月婷婷丁香社区| 亚洲欧美一区二区三区国产精品 | 国内精品免费在线观看| eeuss鲁一区二区三区| 911精品产国品一二三产区| 国产亚洲精久久久久久| 国产欧美在线观看一区| 五月综合激情网| 成人深夜福利app| 成+人+亚洲+综合天堂| 欧美一区二区三区思思人| 国产精品久久久久久久久久免费看 | 国产精品1区2区3区在线观看| 美女久久久精品| 91国偷自产一区二区开放时间| 精品粉嫩aⅴ一区二区三区四区| 欧美电影免费提供在线观看| 亚洲精选一二三| 亚洲电影在线免费观看| 成人午夜短视频| 日韩亚洲电影在线| 一区二区三区色| av福利精品导航| 欧美大尺度电影在线| 日韩一区二区三区观看| 亚洲综合成人在线视频| 成人蜜臀av电影| 久久久久国产免费免费| 久久国产成人午夜av影院| 丁香一区二区三区| 欧美刺激脚交jootjob| 亚洲高清中文字幕| 日本高清视频一区二区| 最新不卡av在线| 成人一区二区三区视频| 精品福利在线导航| 日本免费新一区视频| 国产成人综合自拍| 欧美精品一区二区不卡 | aa级大片欧美| 国产日韩亚洲欧美综合| 韩国视频一区二区| 亚洲精品一线二线三线无人区| 亚洲18色成人| 91精选在线观看| 天堂av在线一区| 欧美日韩日日夜夜| 亚洲电影一区二区三区| 欧美日韩一区三区| 亚洲国产精品久久一线不卡| 91在线小视频| 夜夜揉揉日日人人青青一国产精品| 色综合天天综合狠狠| 7777精品伊人久久久大香线蕉最新版 | 日韩精品视频网| 欧美日韩免费电影| 日韩不卡一区二区三区 | 69堂亚洲精品首页| 日本亚洲欧美天堂免费| 7878成人国产在线观看| 日本欧美一区二区三区乱码 | 欧美一区二区视频免费观看| 日韩av中文字幕一区二区| 欧美一区二区网站| 极品少妇xxxx偷拍精品少妇| 久久亚洲综合av| 成人av在线资源| 亚洲精品乱码久久久久久日本蜜臀| 色哟哟国产精品| 亚洲va欧美va天堂v国产综合| 欧美丰满一区二区免费视频| 免费在线看一区| 久久人人爽人人爽| 成人国产一区二区三区精品| 亚洲综合在线视频| 91精品国产麻豆| 精品在线免费视频| 国产精品不卡在线观看| 欧美色倩网站大全免费| 精品一区二区三区在线观看| 国产精品久久久久影院老司 | 欧美一级一区二区| 国产尤物一区二区| 综合激情成人伊人| 欧美片网站yy| 国产成a人亚洲| 亚洲综合在线五月| 欧美精品一区二区蜜臀亚洲| 91啦中文在线观看| 国产精品麻豆久久久| 欧美在线免费观看视频| 亚洲欧美视频在线观看| 6080亚洲精品一区二区| 成人精品国产福利| 日韩专区在线视频| 国产欧美日韩麻豆91| 欧美午夜影院一区| 国产精品一区二区免费不卡| 亚洲女同ⅹxx女同tv| 日韩亚洲欧美一区| 91视频.com| 另类小说一区二区三区| 亚洲天堂精品在线观看| 日韩一级免费一区| 日本久久一区二区三区| 极品少妇xxxx精品少妇| 亚洲影院理伦片| xfplay精品久久| 欧美日韩你懂的| 波多野洁衣一区| 久久se这里有精品| 亚洲精品免费在线| 国产欧美综合在线观看第十页| 欧美理论在线播放| av在线一区二区| 国产一区二区三区在线观看免费视频| 亚洲一区二区在线免费看| 国产午夜精品一区二区三区嫩草 | 欧美日韩国产123区|