计算机网络应用设计实验报告.docx

上传人:b****5 文档编号:3340407 上传时间:2022-11-21 格式:DOCX 页数:39 大小:24.57KB
下载 相关 举报
计算机网络应用设计实验报告.docx_第1页
第1页 / 共39页
计算机网络应用设计实验报告.docx_第2页
第2页 / 共39页
计算机网络应用设计实验报告.docx_第3页
第3页 / 共39页
计算机网络应用设计实验报告.docx_第4页
第4页 / 共39页
计算机网络应用设计实验报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

计算机网络应用设计实验报告.docx

《计算机网络应用设计实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络应用设计实验报告.docx(39页珍藏版)》请在冰豆网上搜索。

计算机网络应用设计实验报告.docx

计算机网络应用设计实验报告

 

大学计算机学院

课程实验(设计)报告

 

课程名称:

计算机网络应用设计

专业、班:

姓名:

学号:

学期:

2010年上学期

 

第二部分软件设计

一、实验容

完成FTP客户端、POP3客户端两个系统程序,以及一个应用程序。

客户端操作系统为WindowsXP。

FTP程序要求具有图形化界面、上传、下载功能,鼓励实现断点续传功能,POP3程序具有接收、阅读、删除等基本功能。

FTP、POP3程序使用socket方式编程,从创建socket、建立TCP连接开始,实现FTP、SMTP、POP3协议的功能,不得调用第三方控件(可使用操作系统自身的API函数)。

编程工具可以使用C#或VC++。

应用程序要现一个网上书店的基本功能,要求具有前端(用户)和后端(管理)功能,基于Web运行方式。

前端具有浏览书目、购物车等功能,后端具有管理书目、基本统计功能。

编程工具可以是MS.NET(C#)或者J2EE二选一,数据库可以是SQLServer、DB2、Oracle、Mysql、PostgreSQL之一。

二、实验步骤与实验结果

1.FTP源程序

说明:

本程序使用VC++编写,开发环境为VS2008

/******************************************************************************

//连接FTP服务器

******************************************************************************/

voidCmfcftp3Dlg:

:

OnBnClickedButton1()

{

m_pInetSession=newCInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);

UpdateData(TRUE);

try

{

//根据给出的参数连接到FTP服务器

m_pFtpConnection=m_pInetSession->GetFtpConnection(m_host,m_username,m_password,m_port);

if(m_pFtpConnection!

=NULL)

{

CStringm_i;

m_i="连接成功\r\n";

m_ftpinfo+=m_i;

UpdateData(FALSE);

List();

}

}

catch(CInternetException*pEx)

{

CStringm_i;

m_i="连接no成功\r\n";

m_ftpinfo+=m_i;

UpdateData(FALSE);

TCHARszError[1024];

if(pEx->GetErrorMessage(szError,1024))

{

m_i=(CString)szError;

m_ftpinfo+=m_i;

UpdateData(FALSE);

}

else

AfxMessageBox("Therewasanexception");

pEx->Delete();

m_pFtpConnection=NULL;

}

}

 

/*********************************************************************

//列出FTP服务器上的所有文件

****************************************************************************/

voidCmfcftp3Dlg:

:

List()

{

CStringm_i;

CStringm_ii;

CStringArraym_Dir;

CFtpFileFindfinder(m_pFtpConnection);

BOOLbWorking=finder.FindFile(_T("*"));

while(bWorking)

{

bWorking=finder.FindNextFile();

if(finder.IsDots())

continue;

if(finder.IsDirectory())//如果是目录。

{

m_Dir.Add(finder.GetFileName());

}

else

{

m_i=finder.GetFileName()+"\r\n";

for(intj=0;j

{

m_ii="\t";

m_ftpinfo=m_ftpinfo+m_ii;

}

m_ftpinfo+=m_i;

UpdateData(FALSE);

}

}

finder.Close();

for(inti=0;i

{

n++;

m_i="["+m_Dir.GetAt(i)+"]"+"\r\n";

for(intj=1;j

{

m_ii="\t";

m_ftpinfo=m_ftpinfo+m_ii;

}

m_ftpinfo+=m_i;

UpdateData(FALSE);

BOOLm_suc=0;

while(!

m_suc)

{

m_suc=m_pFtpConnection->SetCurrentDirectory(m_Dir.GetAt(i));

}

List();

BOOLm_suc1=0;

while(!

m_suc1)

{

m_suc1=m_pFtpConnection->SetCurrentDirectory("..");

}

n--;

}

}

 

2.POP3源程序

说明:

本程序是使用VC++编写,开发环境为VS2008,这里只贴了与实现相关的代码,界面部分的代码不在此描述了。

MyPop3App.cpp文件:

BOOLCMyPop3App:

:

InitInstance()

{

INITCOMMONCONTROLSEXInitCtrls;

InitCtrls.dwSize=sizeof(InitCtrls);

//将它设置为包括所有要在应用程序中使用的

//公共控件类。

InitCtrls.dwICC=ICC_WIN95_CLASSES;

InitCommonControlsEx(&InitCtrls);

CWinApp:

:

InitInstance();

AfxEnableControlContainer();

SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

WORDwVersionRequested;

wVersionRequested=MAKEWORD(1,1);

interr=WSAStartup(wVersionRequested,&wsaData);//TheWindowsSocketsWSAStartupfunctioninitiatesuseofWs2_32.dllbyaprocess

if(err!

=0)

returnFALSE;

if(LOBYTE(wsaData.wVersion)!

=1||HIBYTE(wsaData.wVersion)!

=1)

returnFALSE;

CMyPop3Dlgdlg;

m_pMainWnd=&dlg;

INT_PTRnResponse=dlg.DoModal();

if(nResponse==IDOK)

{

//TODO:

在此放置处理何时用

//“确定”来关闭对话框的代码

}

elseif(nResponse==IDCANCEL)

{

//TODO:

在此放置处理何时用

//“取消”来关闭对话框的代码

}

//由于对话框已关闭,所以将返回FALSE以便退出应用程序,

//而不是启动应用程序的消息泵。

returnFALSE;

}

 

intCMyPop3App:

:

ExitInstance()

{

//TODO:

在此添加专用代码和/或调用基类

WSACleanup();

returnCWinApp:

:

ExitInstance();

}

 

/**********************************************************************

//自定义的通过套接字发送数据函数

*************************************************************************/

intCMyPop3Dlg:

:

Send(SOCKET&sock,TCHARconst*buf,intlen,intflag)

{

intbytes(0),count(0);

while(count

{

bytes=send(sock,buf+count,len-count,flag);

if(bytes==-1||bytes==0)

return-1;

count+=bytes;

}

returncount;

}

 

/******************************************************************************

//自定义的接收POP3发送的数据的函数

******************************************************************************/

intCMyPop3Dlg:

:

Pop3Recv(SOCKET&m_sock,TCHAR*buf,intlen,intflags)

{

intrs;

intoffset=0;

do

{

if(offset>len-2)

returnoffset;

rs=recv(m_sock,buf+offset,len-offset,flags);

if(rs<0)/*erroroccur*/

return-1;

offset+=rs;

buf[offset]='\0';

}while(strstr(buf,"\r\n.\r\n")==(char*)NULL);

returnoffset;

}

 

/******************************************************************************

//从服务器对LIST命令的返回信息中,获取总数

******************************************************************************/

intCMyPop3Dlg:

:

getMailSum(TCHAR*responseToLIST)

{

intsum=0;

TCHAR*p=strstr(responseToLIST,"\r\n");

if(p==NULL)

returnsum;

p=strstr(p+2,"\r\n");

if(p==NULL)

returnsum;

while((p=strstr(p+2,"\r\n"))!

=NULL)

sum++;

returnsum;

}

/******************************************************************************

//从服务器返回的容中抽取标题

***********************************************************************************/

boolCMyPop3Dlg:

:

GetSubject(TCHAR*subject,TCHARconst*buf)

{

TCHARconst*p=strstr(buf,"Subject:

");

if(p==NULL)

returnfalse;

p=p+9;

for(inti=0;i<32;i++)

{

if(p[i]=='\r'||p[i]=='\n')

{

subject[i]='\0';

break;

}

subject[i]=p[i];

}

returntrue;

}

 

/******************************************************************************

//登录失败时的善后处理(关闭套接字、禁用注销按钮、启用登录按钮)

******************************************************************************/

intCMyPop3Dlg:

:

loginFail()

{

GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);

GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);

closesocket(m_sock);

return0;

}

 

/******************************************************************************

//点击登录按钮

******************************************************************************/

voidCMyPop3Dlg:

:

OnLogin()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

if(m_serverAddr.IsEmpty())

{

SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写Pop3服务器地址"));

return;

}

elseif(m_portNo.IsEmpty())

{

SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写端口号"));

return;

}

elseif(m_userName.IsEmpty())

{

SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写您的用户名"));

return;

}

elseif(m_passwd.IsEmpty())

{

SetDlgItemText(IDC_STATIC_ERRORINFO,_T("请填写您的密码"));

return;

}

GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);

AfxBeginThread(connToServerThread,this);

return;

}

 

/******************************************************************************

//点击注销按钮

******************************************************************************/

voidCMyPop3Dlg:

:

OnLogoff()

{

//TODO:

在此添加控件通知处理程序代码

TCHARsendbuf[10],recvbuf[128];

memset(recvbuf,0,sizeof(recvbuf));

strcpy(sendbuf,"QUIT\r\n");

//发送QUIT消息,结束本次会话。

send(m_sock,sendbuf,strlen(sendbuf),0);

intrt=recv(m_sock,recvbuf,sizeof(recvbuf),0);

//显示服务器返回的信息。

m_CmdInfo+="\r\nResponsetoQuit:

";

m_CmdInfo+=recvbuf;

SetDlgItemText(IDC_EDIT6,m_CmdInfo);

if(rt<=0||strncmp(recvbuf,"+OK",3)!

=0)

{

SetDlgItemText(IDC_STATIC_ERRORINFO,"注销失败!

");

return;

}

loginFail();

SetDlgItemText(IDC_STATIC_ERRORINFO,"注销成功!

");

}

 

/******************************************************************************

//点击收取按钮

******************************************************************************/

voidCMyPop3Dlg:

:

OnReceiveLetters()

{

//TODO:

在此添加控件通知处理程序代码

AfxBeginThread(recvLetterThread,this);

return;

}

 

/******************************************************************************

//连接服务器线程

******************************************************************************/

UINTCMyPop3Dlg:

:

connToServerThread(LPVOIDlpVoid)

{

CMyPop3Dlg*pthis=(CMyPop3Dlg*)lpVoid;

pthis->m_sock=socket(AF_INET,SOCK_STREAM,0);//创建流式套接字。

 

//获取pop3服务器的IP地址。

structhostent*p;

if((p=gethostbyname(pthis->m_serverAddr))==NULL)

{

pthis->loginFail();

return1;

}

TCHARserverIP[100];

sprintf(serverIP,"%u.%u.%u.%u",

(unsignedchar)p->h_addr_list[0][0],

(unsignedchar)p->h_addr_list[0][1],

(unsignedchar)p->h_addr_list[0][2],

(unsignedchar)p->h_addr_list[0][3]);

 

//创建一个SOCKADDR_IN

SOCKADDR_INsockaddr;

sockaddr.sin_family=AF_INET;

sockaddr.sin_port=htons(atoi((LPCSTR)(LPCTSTR)pthis->m_portNo));

sockaddr.sin_addr.S_un.S_addr=inet_addr(serverIP);

 

//连接到服务器

if(0!

=connect(pthis->m_sock,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR)))

{

pthis->SetDlgItemText(IDC_STATIC_ERRORINFO,_T("连接服务器失败。

输入是否有误?

"));

pthis->loginFail();

return1;

}

 

//检查服务器返回的信息。

TCHARbuf[128];

memset(buf,0,sizeof(buf));

intreturnval(0);

returnval=recv(pthis->m_sock,buf,sizeof(buf),0);

if(returnval<=0||strncmp(buf,"+OK",3)!

=0)

{

pthis->SetDlgItemText(IDC_STATIC_ERRORINFO,_T("连接服务器失败。

"));

pthis->loginFail();

return1;

}

//保存服务器传回来的信息。

pthis->m_CmdInfo+="\r\nResponsetoConn:

";

pthis->m_CmdInfo+=buf;

pthis->SendMessage(WM_CONNSERVER_SUCX,0,0);

}

 

/****************************************************************************

//连接服务器成功的消息响应函数

******************************************************************************/

LRESULTCMyPop3Dlg:

:

login(WPARAMwParam,LPARAMlParam)

{

//显示服务器传回来的信息

SetDlgItemText(IDC_EDIT6,m_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1