// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_progress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
m_progress->SetPos(0);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
客户端具体实现部分:
void CRecvFileClientDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
ConnectServer();
}
BOOL CRecvFileClientDlg::InitSocket()
{
//加载套接字库 www.2cto.com
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return FALSE;
}
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return FALSE;
}
return TRUE;
}
void CRecvFileClientDlg::ConnectRecvFileData(DWORD ip,int port)
{
unsigned long long file_size=0;
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(ip);
addrSrv.sin_port=ntohs(port);
addrSrv.sin_family = AF_INET;
//connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//recv(sockClient,(char*)&file_size,sizeof(unsigned long long)+1,NULL);
if (!connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T(""));
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T("连接服务器成功!\r\n"));
recv(sockClient,(char*)&file_size,sizeof(unsigned long long)+1,NULL);
unsigned short maxvalue = file_size; //此处不太稳妥 当数据很大时可能会出现异常
m_progress->SetRange(0,maxvalue);
if (file_size>0)
{
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T(""));
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T("文件下载到本地 d:\\test.zip \r\n"));
DWORD dwNumberOfBytesRecv=0;
DWORD dwCountOfBytesRecv=0;
char Buffer[1024];
CString filename = _T("d:\\test.zip");
HANDLE hFile;
hFile = CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
do
{
m_progress->SetPos(dwCountOfBytesRecv);//更新进度条
dwNumberOfBytesRecv = ::recv(sockClient,Buffer,sizeof(Buffer),0);
::WriteFile(hFile,Buffer,dwNumberOfBytesRecv,&dwNumberOfBytesRecv,NULL);
dwCountOfBytesRecv += dwNumberOfBytesRecv;
} while (file_size - dwCountOfBytesRecv);
CloseHandle(hFile);
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T(""));
GetDlgItem(IDC_SHOWINFO)->SetWindowText(_T("文件接收完毕!\r\n"));
AfxMessageBox(_T("文件接收完毕!"));//醒目可以