1、 try /根据给出的参数连接到FTP服务器 m_pFtpConnection=m_pInetSession-GetFtpConnection(m_host,m_username,m_password,m_port); if (m_pFtpConnection != NULL) CString m_i; m_i=连接成功rn; m_ftpinfo +=m_i; UpdateData(FALSE); List(); catch (CInternetException * pEx) CString m_i; m_i=连接no成功rn m_ftpinfo +=m_i; UpdateData(FALS
2、E); TCHAR szError1024; if ( pEx-GetErrorMessage(szError,1024) m_i=(CString) szError; else AfxMessageBox(There was an exception); pEx-Delete(); m_pFtpConnection=NULL;/*/ 列出FTP服务器上的所有文件*/List() CString m_i; CString m_ii; CStringArray m_Dir; CFtpFileFind finder(m_pFtpConnection); BOOL bWorking=finder.F
3、indFile(_T(*); while (bWorking) bWorking = finder.FindNextFile(); if ( finder.IsDots() ) continue; if (finder.IsDirectory() / 如果是目录。 m_Dir.Add( finder.GetFileName(); else m_i=finder.GetFileName()+rn for (int j=0;jn;j+) m_ii=t m_ftpinfo=m_ftpinfo+m_ii; finder.Close(); for(int i=0;iSetCurrentDirectory
4、(m_Dir.GetAt(i); List(); BOOL m_suc1=0; while(!m_suc1) m_suc1= m_pFtpConnection-SetCurrentDirectory(. n-;2. POP3源程序本程序是使用VC+编写,开发环境为VS2008,这里只贴了与实现相关的代码,界面部分的代码不在此描述了。MyPop3App.cpp 文件:BOOL CMyPop3App:InitInstance() INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); / 将它设置为包括所有要在应用
5、程序中使用的 / 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp:InitInstance(); AfxEnableControlContainer(); SetRegistryKey(_T(应用程序向导生成的本地应用程序 WORD wVersionRequested; wVersionRequested = MAKEWORD(1, 1); int err = WSAStartup(wVersionRequested, &wsaData); /The Windows So
6、ckets WSAStartup function initiates use of Ws2_32.dll by a process if (err != 0) return FALSE; if (LOBYTE(wsaData.wVersion) != 1 | HIBYTE(wsaData.wVersion) != 1) CMyPop3Dlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse = IDOK)/ TODO: 在此放置处理何时用 / “确定”来关闭对话框的代码 else if (nRes
7、ponse = IDCANCEL) / TODO: / “取消”来关闭对话框的代码 / 由于对话框已关闭,所以将返回FALSE 以便退出应用程序, / 而不是启动应用程序的消息泵。 return FALSE;int CMyPop3App:ExitInstance() / TODO: 在此添加专用代码和/或调用基类 WSACleanup(); return CWinApp:ExitInstance();/*/ 自定义的通过套接字发送数据函数*/int CMyPop3Dlg:Send(SOCKET& sock, TCHAR const * buf, int len, int flag) int b
8、ytes(0), count(0); while ( count len - 2 ) return offset; rs = recv(m_sock, buf + offset, len - offset, flags); if ( rs 0 ) /* error occur */ offset += rs; bufoffset = 0 while ( strstr(buf, rn.rn) = (char*)NULL ); return offset;/ 从服务器对LIST 命令的返回信息中,获取总数getMailSum(TCHAR* responseToLIST) int sum = 0;
9、TCHAR* p = strstr(responseToLIST, if ( p = NULL ) return sum; p = strstr(p + 2, while ( (p = strstr(p + 2, ) != NULL ) sum+; return sum;/ 从服务器返回的容中抽取标题*/bool CMyPop3Dlg:GetSubject(TCHAR* subject, TCHAR const * buf) TCHAR const * p = strstr(buf, Subject: return false; p = p + 9; for (int i = 0; i Ena
10、bleWindow(TRUE); GetDlgItem(IDC_BUTTON2)-EnableWindow(FALSE); closesocket(m_sock); return 0;/ 点击登录按钮void CMyPop3Dlg:OnLogin() 在此添加控件通知处理程序代码 if (m_serverAddr.IsEmpty() SetDlgItemText(IDC_STATIC_ERRORINFO, _T(请填写Pop3 服务器地址 return; else if (m_portNo.IsEmpty()请填写端口号 else if (m_userName.IsEmpty()请填写您的用户
11、名 else if (m_passwd.IsEmpty()请填写您的密码 AfxBeginThread(connToServerThread, this); return;/ 点击注销按钮OnLogoff() TCHAR sendbuf10, recvbuf128; memset(recvbuf, 0, sizeof(recvbuf); strcpy(sendbuf, QUIT rn / 发送QUIT 消息,结束本次会话。 send(m_sock, sendbuf, strlen(sendbuf), 0); int rt = recv(m_sock, recvbuf, sizeof(recvb
12、uf), 0); / 显示服务器返回的信息。 m_CmdInfo += rnResponse to Quit: m_CmdInfo += recvbuf; SetDlgItemText(IDC_EDIT6, m_CmdInfo); if (rt m_sock = socket(AF_INET, SOCK_STREAM, 0); / 创建流式套接字。 / 获取pop3 服务器的IP地址。 struct hostent * p; if (p = gethostbyname(pthis-m_serverAddr) =NULL) pthis-loginFail(); return 1; TCHAR s
13、erverIP100; sprintf(serverIP, %u.%u.%u.%u, (unsigned char)p-h_addr_list00, h_addr_list01, h_addr_list02, h_addr_list03); / 创建一个SOCKADDR_IN SOCKADDR_IN sockaddr; sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(atoi(LPCSTR)(LPCTSTR)pthis-m_portNo); sockaddr.sin_addr.S_un.S_addr = inet_addr(se
14、rverIP); / 连接到服务器 if (0 != connect(pthis-m_sock, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR)SetDlgItemText(IDC_STATIC_ERRORINFO, _T(连接服务器失败。输入是否有误? / 检查服务器返回的信息。 TCHAR buf128; memset(buf, 0, sizeof(buf); int returnval(0); returnval = recv(pthis-m_sock, buf, sizeof(buf), 0); if (returnval=0 | strncmp(buf, / 保存服务器传回来的信息。m_CmdInfo += rnResponse to Conn:m_CmdInfo += buf;SendMessage(WM_CONNSERVER_SUCX, 0, 0);/*/ 连接服务器成功的消息响应函数LRESULT CMyPop3Dlg:login(WPARAM wParam, LPARAM lParam) / 显示服务器传回来的信息 SetDlgItemText(IDC_EDIT6, m_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1