📄 clientdlg.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 + -