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

📄 msg1dlg.cpp

📁 自己写的一个类似飞鸽,可以和飞鸽通信的,且象酷狗的一个局域网通信的程序,但播放mp3的功能不完没,希望得到指点
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	*pResult = 0;
}

UINT TcpAcceptThread(LPVOID param)
{
	SOCKET sock =*(SOCKET*)param;
	char buf[MAXBUF];
	
	int recvcnt=recv(sock,buf,3,0);
	if(recvcnt<=0)return 1;
	
	if(buf[0]=='L' && buf[1]=='S' && buf[2]=='T')//传文件列表
	{
		Search("e:");
		CFile lfile;
		if(lfile.Open(LISTFILEPATH,CFile::modeRead |CFile::shareDenyNone)==false)return 1;
			
		int len=lfile.GetLength();
		int fileoffset=0;
		while(fileoffset<len)
		{
			//AfxMessageBox("d");
			lfile.Seek(fileoffset,CFile::begin);
			int readlen=lfile.Read(buf,1024*8);
			if(readlen==0)break;
			int sendlen=send(sock,buf,readlen,0);
			if( sendlen<0)break;
			fileoffset+=sendlen;
		}
		lfile.Close();
		
	}
	else if(buf[0]=='T' && buf[1]=='T' && buf[2]=='F')//传临时文件
	{
		int revcnt=recv(sock,buf,MAXBUF,0);
		buf[revcnt]='\0';
		//AfxMessageBox(buf);
		CFile tfile;
		if(tfile.Open(buf, CFile::modeRead |CFile::shareDenyNone)==false)
		{
			AfxMessageBox("openserverfile");
			return 0;
		}
		int len=tfile.GetLength();
		int fileoffset=0;
		while(fileoffset<len)
		{
			//AfxMessageBox("d");
			tfile.Seek(fileoffset,CFile::begin);
			int readlen=tfile.Read(buf,1024*8);
			if(readlen==0)break;
			int sendlen=send(sock,buf,readlen,0);
			if( sendlen<0)break;
			fileoffset+=sendlen;
		}
		tfile.Close();
	}
	else if(buf[0]=='1' && buf[1]==':')//和飞鸽传文件
	{
		int revcnt=recv(sock,buf,MAXBUF,0);
		CFile tfile;
		if(tfile.Open(transfilename, CFile::modeRead |CFile::shareDenyNone)==false)
		{
			AfxMessageBox("openserverfile");
			return 0;
		}
		int len=tfile.GetLength();
		int fileoffset=0;
		while(fileoffset<len)
		{
			//AfxMessageBox("d");
			tfile.Seek(fileoffset,CFile::begin);
			int readlen=tfile.Read(buf,1024*8);
			if(readlen==0)break;
			int sendlen=send(sock,buf,readlen,0);
			if( sendlen<0)break;
			fileoffset+=sendlen;
		}
		tfile.Close();
	}

	closesocket(sock);


	return 0;
}
UINT TcpListenThread(LPVOID param)
{
	SOCKET socklisten=socket(AF_INET,SOCK_STREAM,0);
	sockaddr_in sin;
	sin.sin_addr.s_addr=0;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(2425);
	if(bind(socklisten,(sockaddr*)&sin,sizeof(sockaddr))==SOCKET_ERROR)
	{
		closesocket(socklisten);
		AfxMessageBox("tcp bind error");
		return 1;
	}
	listen(socklisten,5);
	int len=sizeof(sockaddr);
	while(1)
	{
		SOCKET sock;
		sock=accept(socklisten,(sockaddr*)&sin,&len);
		AfxBeginThread(TcpAcceptThread,&sock);
		
	}



}
UINT TcpGetListThread(LPVOID param)
{
	CString szip((char*)param);
	//AfxMessageBox(szip);
	SOCKET	sock=socket(AF_INET,SOCK_STREAM,0);
	sockaddr_in  sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(2425);
	sin.sin_addr.s_addr=inet_addr(szip.GetBuffer());
	char buf[MAXBUF];
	if(connect(sock,(sockaddr*)&sin,sizeof(sockaddr))==SOCKET_ERROR)
		AfxMessageBox("connect list");
	else
	{
		CFile lfile;
		if(lfile.Open("c:\\list.txt",CFile::modeWrite |CFile::modeCreate)==false)
		{
			closesocket(sock);
			return 1;
		}
		strcpy(buf,"LST");
		send(sock,buf,strlen(buf),0);
		int i=0;
		pDlg->m_musiclist.DeleteAllItems();
	
		while(1)
		{
			int revcnt=recv(sock,buf,MAXBUF,0);
			if(revcnt<=0)break;
			lfile.Write(buf,revcnt);
		}
		lfile.Close();
		FILE *file;
		file=fopen("c:\\list.txt","r");
		if(file==NULL){AfxMessageBox("FILE");return 0;}
		i=0;
		while(fgets(buf,MAXBUF,file))
		{
			int len=strlen(buf);			
			while(buf[len-1]=='\r' || buf[len-1]=='\n')
			{
				len--;
				buf[len]='\0';
			}
			pDlg->m_musiclist.InsertItem(i,buf,0);
			i++;
		}
		fclose(file);
		
	}
	closesocket(sock);




	return 0;

}
DWORD WINAPI TcpGetFileThread(LPVOID param)
{
	CString filename((char*)param);
	//AfxMessageBox(szip);
	SOCKET	sock=socket(AF_INET,SOCK_STREAM,0);
	sockaddr_in  sin;
	//AfxMessageBox(tmpip);
	sin.sin_family=AF_INET;
	sin.sin_port=htons(2425);
	sin.sin_addr.s_addr=inet_addr(tmpip.GetBuffer());

	char buf[MAXBUF];
	if(connect(sock,(sockaddr*)&sin,sizeof(sockaddr))==SOCKET_ERROR)
		AfxMessageBox("connect ttf");
	else
	{
		strcpy(buf,"TTF");
		send(sock,buf,strlen(buf),0);
		send(sock,filename.GetBuffer(),filename.GetLength(),0);
	
		char temppath[256];
		pathtotemppath(filename.GetBuffer(),temppath);
		if(ifdownload)strcpy(temppath,downloadpath);

		CFile tmp;
		if(tmp.Open(temppath,CFile::modeReadWrite | CFile::modeCreate |CFile::shareDenyNone)==false)
		{
			AfxMessageBox("opentmpfile");
			return 1;
		}

		while(1)
		{
			int revcnt=recv(sock,buf,MAXBUF,0);
			if(revcnt==0)break;
			if(revcnt==-1)AfxMessageBox("cfft");
			tmp.Write(buf,revcnt);
		}
		tmp.Close();
	
		
		
	}
	

	//Sleep(5000);
	
	return 0;
}
void Cmsg1Dlg::OnNMDblclkList3(NMHDR *pNMHDR, LRESULT *pResult)//双击播放
{
	// TODO: 在此添加控件通知处理程序代码
	NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;
	int iSel = pListView->iItem;

	if(iSel == -1)
		return;
	CString filename = m_musiclist.GetItemText(iSel, 0);
	int len=filename.GetLength();
	if(filename[len-3]=='m' && filename[len-2]=='p' && filename[len-1]=='3')
		;
	else
		return ;
	
	MCIWndClose(PLAYHWND);
	MCIWndDestroy(PLAYHWND);

	
	char temppath[256];
	pathtotemppath(filename.GetBuffer(),temppath);
	CFileFind ff;
	bool res=ff.FindFile(temppath);
	if(!res)
	{	
		//AfxMessageBox("get");
		//HANDLE h=AfxBeginThread(TcpGetFileThread,(LPVOID*)filename.GetBuffer());
		DWORD threadid;
		ifdownload=false;
		HANDLE h=CreateThread(NULL,0,TcpGetFileThread,(LPVOID*)filename.GetBuffer(),0,&threadid);
		WaitForSingleObject(h,1000000);
	}

	PLAYHWND=MCIWndCreate(pDlg->GetSafeHwnd(),AfxGetInstanceHandle(),0,temppath);
	MCIWndPlay(PLAYHWND);
	*pResult = 0;
}

void Cmsg1Dlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	ShowWindow(SW_HIDE);
	CDialog::OnClose();
}

void Cmsg1Dlg::OnSize(UINT nType, int cx, int cy)
{

	CDialog::OnSize(nType, cx, cy);
	// TODO: 在此处添加消息处理程序代码
}

void Cmsg1Dlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代
	OnCancel();
}
LRESULT Cmsg1Dlg::dealmsg(WPARAM wparam,LPARAM lparam)//托盘图标
{
	UINT shijian=(UINT)lparam;
	switch(shijian)
	{
		
	case WM_LBUTTONDBLCLK: ShowWindow(SW_SHOWNORMAL);

		break;
	case WM_RBUTTONDOWN: 
		{
			CPoint pt;
			GetCursorPos(&pt);
			//pMenu->DestroyMenu(); pMenu->CreatePopupMenu();
			pMenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this,0);
			break;
		}
		
	default:
		break;
	}
	return 0;
};
void Cmsg1Dlg::OnWo3()
{
	// TODO: 在此添加命令处理程序代码
	OnCancel();
}

void Cmsg1Dlg::OnNMRclickList1(NMHDR *pNMHDR, LRESULT *pResult)//好友列表的右键
{
	// TODO: 在此添加控件通知处理程序代码
	CPoint pt;
	GetCursorPos(&pt);
	//pMenu->DestroyMenu(); pMenu->CreatePopupMenu();
	pfriendMenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this,0);
	*pResult = 0;
}

void Cmsg1Dlg::OnNMRclickList3(NMHDR *pNMHDR, LRESULT *pResult)//音乐列表的右键
{
	// TODO: 在此添加控件通知处理程序代码
	CPoint pt;
	GetCursorPos(&pt);
	//pMenu->DestroyMenu(); pMenu->CreatePopupMenu();
	NMLISTVIEW* pListView = (NMLISTVIEW*)pNMHDR;
	imusicSel = pListView->iItem;
	if(imusicSel == -1)
		return;
	pmusicMenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this,0);

	*pResult = 0;
}

void Cmsg1Dlg::OnWoDownload()//音乐列表的下载
{
	// TODO: 在此添加命令处理程序代码

	CString strFileName = m_musiclist.GetItemText(imusicSel, 0);
	CFileDialog dlg(FALSE, NULL, strFileName.GetBuffer(0), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.*)|*.*||", this);
	if(dlg.DoModal() != IDOK)
		return;
	CString strClientPath = dlg.GetPathName();
	strcpy(downloadpath,strClientPath.GetBuffer());
	DWORD threadid;
	ifdownload=true;
	HANDLE h=CreateThread(NULL,0,TcpGetFileThread,(LPVOID*)strFileName.GetBuffer(),0,&threadid);

}

void Cmsg1Dlg::Ontransfile()//好有列表的传文件
{
	// TODO: 在此添加命令处理程序代码

	char bufm[MAXBUF],buf[MAXBUF];
	POSITION pos=m_a.GetFirstSelectedItemPosition();
	int cur=m_a.GetNextSelectedItem(pos);
	CString szip=m_a.GetItemText(cur,2);
	//AfxMessageBox(szip);
	//tmpip=sip;
	//AfxMessageBox(tmpip);
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.*)|*.*||", this);
	if(dlg.DoModal() != IDOK)
		return;
	CString strServerPath = dlg.GetPathName();
	CFile file;
	file.Open(strServerPath,CFile::modeRead );
	transfilesize=file.GetLength();
	strcpy(transfilename,file.GetFileName());
	file.Close();
	
	sprintf(bufm,"0:%s:%x:464ae77a:1:",transfilename,transfilesize);
	int lenm=strlen(bufm);
	buf[0]='\0';
	int i;
	for(i=0;i<lenm;i++)
		buf[i+1]=bufm[i];
	SendPack(2097952,buf,szip.GetBuffer(),lenm+1);

}

void Cmsg1Dlg::OnSetting()
{
	// TODO: 在此添加命令处理程序代码
	setting dlg;
	dlg.DoModal();

}

⌨️ 快捷键说明

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