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

📄 clientdlg.cpp

📁 实现在开发板与PC机客户的文件
💻 CPP
字号:
// CLientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CLient.h"
#include "CLientDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCLientDlg dialog
// UINT SendFile(void *p/*窗口指针*/)
// {
//     	
// 	CString strError;
// 	ASSERT(p!=NULL);
// 	CCLientDlg *pDlg = (CCLientDlg*)p;
// 
// 	CString strIP;	
// 	pDlg->GetDlgItemText(IDC_EDIT_IP,strIP);
// 	char* ip = new char[20];
// 	wcstombs(ip,strIP,20);
// 	DWORD dword = inet_addr(ip);
// 
// 
// 	sockaddr_in addr;
// 	addr.sin_family=AF_INET;//表示在INT上通信
// 	addr.sin_addr.S_un.S_addr=dword;
// 	addr.sin_port=htons(pDlg->m_iPort);
// 	int ret=0;
// 	int error=0;
// 
// 	ret=connect(pDlg->m_hSocket,(LPSOCKADDR)&addr,sizeof(addr));//主动连接服务器
// 
// 	if(ret==SOCKET_ERROR)
// 	{
// 		strError.Format(L"Connect Error:%d ",error=WSAGetLastError());
// 		AfxMessageBox(strError);
// 		closesocket(pDlg->m_hSocket);
// 		return -1;
// 	}
// 	
// 	//文件操作
// 	
// 	CString strPathName = pDlg->m_strPathName;
// 	CFile file;
// 	if(!file.Open(strPathName, CFile::modeRead | CFile::typeBinary))
// 	{
// 		AfxMessageBox(L"打开文件失败");
// 		return -1;
// 	}
// 	long lFileSize = file.GetLength();
// 
// 	char temp[1024];            	            //首先用来存放文件大小,后面用作发送文件缓冲区
// 	memset(temp,0,sizeof(temp)); 
// 	_ltoa(lFileSize, temp, 10);                  //转化为字符
// 
// 	CString str;
// 	str = pDlg->m_strFileName; 
// 	str += "*";
// 	str += temp;
// 
// 	char* strName = new char[sizeof(str)];
// 	wcstombs(strName,str,sizeof(str));
// 	
// 	int ret1=send(pDlg->m_hSocket, strName, str.GetLength(), 0);	//发送文件的名称和大小
// 	if (ret1==SOCKET_ERROR)
// 	{
// 		strError.Format(L"Send File:%d",error=WSAGetLastError());
// 		AfxMessageBox(strError);
// 		return -1;
// 	}
//     
// 	/////////////////////////发送文件///////////////////////////////////////////
// 	int  iEnd =0;
// 	int  ilen =0;
// 	long iTmp =0;
// 	while (1)
// 	{
// 		ilen = file.Read(temp, 1024);
// 		if (ilen==0)
// 		{
// 			break;
// 		}
// 		iEnd = send(pDlg->m_hSocket,temp,ilen,0);
// 		if (iEnd==SOCKET_ERROR)
// 		{
// 			strError.Format(L"Send File:%d",error=WSAGetLastError());
// 			AfxMessageBox(strError);
// 			break;
// 		}
// 		iTmp +=iEnd;
// 		
// 	}
// 	file.Close();
// 	/////////////////判断发送是否成功、结束处理////////////////////////////////////
// 	closesocket(pDlg->m_hSocket);
// 	if (iTmp == lFileSize)
// 	{
// 		//AfxMessageBox("文件发送成功!");
// 		
// 	}
// 	else
// 	{
// 		strError.Format(L"文件发送失败");
// 		AfxMessageBox(strError);
// 		return 0;
// 	}
// 
// 	ExitThread(0);
// 	return 0;
// }

CCLientDlg::CCLientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCLientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCLientDlg)
	m_strPathName = _T("");
	m_iPort = 4000;
	m_hSocket=NULL;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCLientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCLientDlg)
	DDX_Text(pDX, IDC_EDIT_FILE, m_strPathName);
	DDX_Text(pDX, IDC_EDIT_NPORT, m_iPort);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCLientDlg, CDialog)
	//{{AFX_MSG_MAP(CCLientDlg)
	ON_BN_CLICKED(IDC_BUTTON_BROWSER, OnButtonBrowser)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCLientDlg message handlers

BOOL CCLientDlg::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
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	WSADATA wsaData;
	WORD version=MAKEWORD(2,0);
	int ret=WSAStartup(version,&wsaData);
	if(ret!=0) 
	{
		MessageBox(L"Init  Error");
		return FALSE;
	}
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CCLientDlg::OnButtonBrowser() 
{
	// TODO: Add your control notification handler code here
	CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
		L"JPG(*.jpg)|*.jpg|位图文件(*.bmp)|*.bmp|所有文件(*.*)|*.*", NULL);
	if(mFileDlg.DoModal()==IDOK)
	{
		m_strPathName=mFileDlg.GetPathName();
		m_strFileName=mFileDlg.GetFileName();
	}
	 UpdateData(false);
}

void CCLientDlg::InitSock()
{
	if(m_hSocket)//如果已经创建,先关闭
	{
		closesocket(m_hSocket);
        m_hSocket=NULL;
	}
	else
	{
		m_hSocket=socket(AF_INET,SOCK_STREAM,0);
		ASSERT(m_hSocket!=NULL);
	}	
}

void CCLientDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	if(m_hSocket)
	{
		closesocket(m_hSocket);
		
	}
	WSACleanup();
	CDialog::OnCancel();
}

void CCLientDlg::OnSend() 
{
	//发送文件。
	// TODO: Add extra validation here
	m_hSocket=NULL;
	InitSock();//初始化SOCK。BIND

	CString strError;

//	CCLientDlg *pDlg = (CCLientDlg*)p;
	
	CString strIP;	
	GetDlgItemText(IDC_EDIT_IP,strIP);
	char* ip = new char[20];
	wcstombs(ip,strIP,20);
	DWORD dword = inet_addr(ip);
	
	
	sockaddr_in addr;
	addr.sin_family=AF_INET;//表示在INT上通信
	addr.sin_addr.S_un.S_addr=dword;
	addr.sin_port=htons(m_iPort);
	int ret=0;
	int error=0;
	
	ret=connect(m_hSocket,(LPSOCKADDR)&addr,sizeof(addr));//主动连接服务器
	
	if(ret==SOCKET_ERROR)
	{
		strError.Format(L"Connect Error:%d ",error=WSAGetLastError());
		AfxMessageBox(strError);
		closesocket(m_hSocket);
	}
	
	//文件操作
	
	CString strPathName = m_strPathName;
	CFile file;
	if(!file.Open(strPathName, CFile::modeRead | CFile::typeBinary))
	{
		AfxMessageBox(L"打开文件失败");
	}
	long lFileSize = file.GetLength();
	
	char temp[1024];            	            //首先用来存放文件大小,后面用作发送文件缓冲区
	memset(temp,0,sizeof(temp)); 
	_ltoa(lFileSize, temp, 10);                  //转化为字符
	
	CString str;
	str = m_strFileName; 
	str += "*";
	str += temp;
	
	char* strName = new char[20];
	wcstombs(strName,str,str.GetLength());

	int ret1=send(m_hSocket, strName, str.GetLength(), 0);	//发送文件的名称和大小
	if (ret1==SOCKET_ERROR)
	{
		strError.Format(L"Send File:%d",error=WSAGetLastError());
		AfxMessageBox(strError);
	}
    
	/////////////////////////发送文件///////////////////////////////////////////
	int  iEnd =0;
	int  ilen =0;
	long iTmp =0;
	while (1)
	{
		ilen = file.Read(temp, 1024);
		if (ilen==0)
		{
			break;
		}
		iEnd = send(m_hSocket,temp,ilen,0);
		if (iEnd==SOCKET_ERROR)
		{
			strError.Format(L"Send File:%d",error=WSAGetLastError());
			AfxMessageBox(strError);
			break;
		}		
	}
	file.Close();
	/////////////////判断发送是否成功、结束处理////////////////////////////////////
	closesocket(m_hSocket);
	if (iTmp == lFileSize)
	{
		//AfxMessageBox("文件发送成功!");
		
	}
	else
	{
		strError.Format(L"文件发送失败");
		AfxMessageBox(strError);

	}
	

	
//	AfxBeginThread(SendFile, this);
}

⌨️ 快捷键说明

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