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

📄 clientdlg.cpp

📁 这是数据传输的代码
💻 CPP
字号:
// ClientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FileShare.h"
#include "ClientDlg.h"

#include "ThreadProc.h"

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

extern CStatusBarCtrl g_StatusBar;
/////////////////////////////////////////////////////////////////////////////
// CClientDlg dialog


CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CClientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CClientDlg)
	m_strFileName = _T("");
	m_nPort = 488;
	m_strAddr = _T("");
	m_strMessage = _T("");
	m_nTime = 0;
	//}}AFX_DATA_INIT
	this->m_nLastSend=0;
	this->m_nTotalSend=0;
}


void CClientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CClientDlg)
	DDX_Text(pDX, IDC_FILENAME, m_strFileName);
	DDX_Text(pDX, IDC_PORT, m_nPort);
	DDX_Text(pDX, IDC_SERVERADDRESS, m_strAddr);
	DDX_Text(pDX, IDC_MESSAGE, m_strMessage);
	DDX_Text(pDX, IDC_EDIT_TIMEV, m_nTime);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CClientDlg, CDialog)
	//{{AFX_MSG_MAP(CClientDlg)
	ON_WM_LBUTTONDBLCLK()
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_SEND, OnSend)
	ON_MESSAGE(WM_THREADMSG,OnThreadMsg)
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BROWSE_FILE, OnBrowseFile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClientDlg message handlers

void CClientDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
AfxMessageBox("dsfsdf");	
//	CDialog::OnLButtonDblClk(nFlags, point);
}

void CClientDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	HWND h;
	h=::GetDlgItem(this->GetSafeHwnd(),IDC_MESSAGE);
	::SetWindowPos(h,NULL,0,140,cx,cy-140,0);
}

void CClientDlg::OnSend() 
{
	UpdateData(true);
	char				addr[512];
	CString				strFileName,strTmp;
	struct sockaddr_in	sock_addr;
	DWORD				ip;
 	SERVICEPARM			*p;
	int					nIndex;
	
	strcpy(addr,(char*)(LPCTSTR)this->m_strAddr);
	if(GetAddr(addr,&ip))
	{
		AfxMessageBox("无法解析主机地址!");
		return;
	}
	sock_addr.sin_family=AF_INET;
	sock_addr.sin_port=htons(this->m_nPort);
	sock_addr.sin_addr.S_un.S_addr = htonl(ip);

	strTmp = this->m_strFileName;
	nIndex=strTmp.Find("\r\n",0);
	if(nIndex==-1)
	{
		strFileName=strTmp;
	}
	else
	{
		strFileName=strTmp.Left(nIndex);
		strTmp = strTmp.Right(strTmp.GetLength()-nIndex-2);
	}

	while(strFileName.GetLength())
	{
		p=(SERVICEPARM*)malloc(sizeof(SERVICEPARM));
		p->sockservice = socket(AF_INET,SOCK_STREAM,0);
		if(connect(p->sockservice,(sockaddr*)&sock_addr,sizeof(sock_addr)))
		{
			free(p);
			AfxMessageBox("无法连接到主机!");
			return;
		}
		strcpy(p->path,strFileName.GetBuffer(1));
		p->hwndServerDlg=this->GetSafeHwnd();
		p->nTime = m_nTime;
		if(AfxBeginThread(SendDataProc,p)==NULL)
		{
			AfxMessageBox("创建线程失败!");
			return;
		}
		else
		{
			GetDlgItem(IDC_SEND)->EnableWindow(false);
		}

		nIndex=strTmp.Find("\r\n",0);
		if(nIndex==-1)
		{
			strFileName="";
		}
		else
		{
			strFileName=strTmp.Left(nIndex);
			strTmp = strTmp.Right(strTmp.GetLength()-nIndex-2);
		}
	}
}

BOOL CClientDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	char	sz[256];

	GetPrivateProfileString(FILESHARE,SERVERADDR,"",sz,sizeof(sz),CONFIG_FILE);
	this->m_strAddr=sz;
	GetPrivateProfileString(FILESHARE,SERVERPORT,"",sz,sizeof(sz),CONFIG_FILE);
	this->m_nPort = atoi(sz);
	GetPrivateProfileString(FILESHARE,FILENAME,"",sz,sizeof(sz),CONFIG_FILE);
	this->m_strFileName=sz;
	UpdateData(false);

	this->SetTimer(SEND_SPEED_TIMER,TIMER_LONG,NULL);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CClientDlg::OnThreadMsg(WPARAM wParm,LPARAM lParm)
{
	UpdateData(true);
	char msg[1024];
	switch(wParm)
	{
	case MSG_THREADEXIT:
		GetDlgItem(IDC_SEND)->EnableWindow(true);
		break;
	case MSG_SHOWMSG:
		strcpy(msg,(char*)lParm);
		this->m_strMessage+=msg;
		UpdateData(false);
		break;
	case MSG_STATUSBAR_MSG:
		strcpy(msg,(char*)lParm);
		this->GetParent()->SetWindowText(msg);
		break;
	case MSG_SEND_DATA:
		this->m_nLastSend += (DWORD)lParm;
		break;
	default:
		break;
	}	
}

void CClientDlg::OnTimer(UINT nIDEvent) 
{
	DWORD	nSpeed;
	char	msg[512];
	static char	s1[3];
	static char	s2[3];
	float	n1,n2;
	switch(nIDEvent)
	{
	case SEND_SPEED_TIMER:
		
		{
			nSpeed = this->m_nLastSend/(TIMER_LONG/1000);
			this->m_nTotalSend += this->m_nLastSend;
			if(m_nTotalSend/MB)
			{
				s1[0]='M';
				s1[1]='B';
				n1=(float)m_nTotalSend/MB;
			}
			else if(m_nTotalSend/KB)
			{
				s1[0]='K';
				s1[1]='B';
				n1=(float)m_nTotalSend/KB;
			}
			else
			{
				s1[0]='B';
				s1[1]=0;
				n1=(float)m_nTotalSend;
			}
			if(nSpeed/MB)
			{
				s2[0]='M';
				s2[1]='B';
				n2=(float)nSpeed/MB;
			}
			else if(nSpeed/KB)
			{
				s2[0]='K';
				s2[1]='B';
				n2=(float)nSpeed/KB;
			}
			else
			{
				s2[0]='B';
				s2[1]=0;
				n2=(float)nSpeed;
			}
			sprintf(msg,"发送:%0.3f%s 速度:%0.3f%sps",n1,s1,n2,s2);
			this->m_nLastSend = 0;
			g_StatusBar.SetText(msg,1,NULL);
		}
		break;
	default:
		CDialog::OnTimer(nIDEvent);
		break;
	}
}

CClientDlg::~CClientDlg()
{
}

void CClientDlg::OnDestroy() 
{

	UpdateData(TRUE);
	char sz[32];
	WritePrivateProfileString(FILESHARE,SERVERADDR,(LPCTSTR)this->m_strAddr,CONFIG_FILE);
	sprintf(sz,"%d",this->m_nPort);
	WritePrivateProfileString(FILESHARE,SERVERPORT,sz,CONFIG_FILE);
	WritePrivateProfileString(FILESHARE,FILENAME,(LPCTSTR)this->m_strFileName,CONFIG_FILE);

	CDialog::OnDestroy();	
	// TODO: Add your message handler code here	
}

void CClientDlg::OnBrowseFile() 
{
	UpdateData(true);

	OPENFILENAME	OpenFileName;
	char			szFileName[1024]={0};
	char			dir[256];
	char			file[256];
	int				nIndex;

	memset(&OpenFileName,0,sizeof(OpenFileName));
	OpenFileName.lStructSize		= sizeof(OPENFILENAME);
	OpenFileName.hwndOwner			= this->GetSafeHwnd();
	OpenFileName.hInstance			= AfxGetInstanceHandle();
	OpenFileName.lpstrFilter		= "所有文件(*.*)\0*.*\0\0";

	OpenFileName.lpstrFile         = szFileName;
	OpenFileName.nMaxFile          = sizeof (szFileName);
	OpenFileName.lpstrFileTitle    = "";
	OpenFileName.nMaxFileTitle     = 0;
	OpenFileName.lpstrInitialDir   = NULL;
	OpenFileName.lpstrTitle        = "选择发送文件";
	OpenFileName.Flags			   = OFN_NOCHANGEDIR|
									 OFN_EXPLORER|
									 OFN_ALLOWMULTISELECT;
	//OpenFileName.Flags =0;
	OpenFileName.nFileOffset       = 0;
	OpenFileName.nFileExtension    = 1;
	OpenFileName.lpstrDefExt		=NULL;

	
	if(::GetOpenFileName(&OpenFileName))
	{
		this->m_strFileName="";
		nIndex=0;
		strcpy(dir,szFileName);
		if(dir[strlen(dir)-1]!='\\')
		{
			strcat(dir,"\\");
			nIndex=strlen(dir);
		}
		else
		{
			nIndex=strlen(dir)+1;
		}
		if(strlen(&szFileName[nIndex])>0)
		{
			while(strlen(&szFileName[nIndex])>0)
			{
				sprintf(file,"%s%s\r\n",dir,&szFileName[nIndex]);
				this->m_strFileName += file;
				nIndex += strlen(&szFileName[nIndex])+1;
			}
		}
		else
		{
			m_strFileName=szFileName;
		}
		UpdateData(false);
	}
	
}

⌨️ 快捷键说明

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