局域网文件传输及消息发送_第1页
局域网文件传输及消息发送_第2页
局域网文件传输及消息发送_第3页
局域网文件传输及消息发送_第4页
局域网文件传输及消息发送_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、?网络程序设计?课程设计报告书题目:局域网文件传输与消息通信专业:网络工程学号:20211423学生姓名:史政法指导教师:魏宁完成日期:2021年06月06日一、题目及要求Window程序设计的根本要求:1 .熟练掌握网络的根本概念和原理;2 .熟练掌握网络编程接口Socket概念及编程原理;3 .掌握基于TCP/IP的Internet编程技术;4 .掌握各种软件开发工具的使用过程及方法.本实例程序的技术要点是:如何从CasyncSocket类派生出自己的WinSock类.理解WinSock类与应用程序框架的关系.重点学习流式套接字对象的使用.处理网络事件的方法.二、系统概要设计1、CSock

2、et类的介绍在MFC中,为了提供面向对象的编程方式而封装了两个WinSock类:一个是CAsyncSocket类,另一个是CSocket类.他们的不同点在于前者使用的是非阻塞模式操作,而后者可以支持阻塞模式的I/O操彳KCSocket类是从CAsyncSocket类中继承来的,他为程序员提供了更高级的抽象性.由于CSocket类和CArchive类一起使用,并且治理了通讯的大多数操作,从而使程序员从网络编程的底层细节中解脱了出来,不必使用CAsyncSocket的一些成员函数和一些WindowsSocketAPI函数来处理通信问题.共同使用CSocket和CArchive类对象进行编程是最简单

3、的WinSock编程模式.下面是使用CSocket类进行网络通信的过程(1) 构造CSocket类对象(2) 用CSocket类对象的Create函数创立WindowsSocket,Create()函数会调用Bind()函数将此函数绑定的指定的地址和端口.(3) Socket创立完毕后,Listen()函数在效劳器端进行监听客户的连接请求.(4) 在这一步,效劳器端调用Accept0函数对客户端发来的请求进行接受和处理,而客户端那么调用Connect()函数向效劳器发出连接请求.(5) 在客户端和效劳器端的数据传输完成后,应该分别在两边销毁创立的CSocket对象.2、编程思路和工程实现用MF

4、CAppWizard新建一个给予对话框的工程,在第三步中添加WindowsSocketS的十穴住.米开【J松件IDCapiiun丁工11人上v/kc+a+ictovfH11IDIDC_STATIC/Ki卡口口in,日于九小siaiiciexiv/kc+a+ictovfIDC_STATIC_SERVPORT,八儿FIJip.萝I在接的in日于九小siaiiciexiv/kc+a*icfovfIDC_STATIC_MSG玄旺1女口Jip.消自日于九4siaiiciexiIDC_MYIP1F3ip叫川binierneiaddIDC_YOURIPip地址inierneiadd幺扃左号木匹priithe

5、xIDC_EDIT_MSG“ULH耳l/euiiuoxhiittcnIDC_BUIIONCONNECT启动npYjjaknuuiiunhiittnnIDC_BUIION_DISCONNE关闭npvjJaknuuiiunIDC_BUTTON_SENDMSGu|y也位UuiiunIDC_BUIION_SEND_FIL友透们思叩望也位Uuiiun土方TTh14ccIDC_BUTTON_STOP1透乂件/吉t./力;王uiv修班UuiiunhiittonIDCANCELnpYjjaknuuiiun进程prucessIDC_PROGRESS_SEND_F支持,建立的程序界面如右图:图1一程序主对话框中的

6、控件属性MessageMapsMemberVariables|Aulomatian|ActiveXEvents|ClassInfo|Control1D&TypeMemberIDCBUTTONDISCONNECTIDCBUTTONSENDFILEIDCBUTTONSENDMSGIDCBUTTONSTOPIDCBUTTONCONNECTIDCEDITMSGCStringmMsgSendIDCMYIPCIPAddressCtrtmMylpIDCPROGRESSSENDFILECProgressCtrlmProgress|lDCYOUHIPClFAddressCtrfmYourlpEmjed:

7、Passname:AddClass.,nieiran:|cFll£tranDlg*AddVariable.DX.JIFiletranDIfl.h,D:l八Filetr注nDlg>cpp二IDCANCELDeleteVariableDescription:maptoCIPAddressCtrlmember0inoluv图2对话框中的控件对象定义相应的成员变量编程思路:首先在对话框中输入要连接的IP地址,然后单击“启动按钮,要连接的主机也做相同的操作,两边都准备完事后,两台计算机就可以消息和文件的传输了.单击“启动按钮时,处理函数启动了监听线程来启动效劳,主要的语句如下:pThre

8、adListen=:AfxBeginThread(_ListenTcpThread,this);点击“发送消息按钮时,处理函数启动了消息发送线程来进行消息的传送,语句如下:pThreadSendMsg=:AfxBeginThread(_SendMsgThread,this);当点击“传送文件按钮时,处理函数启动了文件传输线程来进行文件传输,语句如下:pThreadSendMsg=:AfxBeginThread(_SendFileThread,this);下面主要介绍一下要用到的三个线程和一个文件接收处理函数.首先要产生三个线程对象:CWinThread_ListenTcpThread;CWin

9、Thread_SendFileThread;CWinThread_SendMsgThread;三、系统详细设计1 .监听线程函数UINT_ListenTcpThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockSrvr;pDlg->m_Potr=PORT;保存当前使用端口,用于关闭intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)AfxMes

10、sageBox("_ListenTcpThreadCreate错误!"+pDlg->GetError(GetLastError();return-1;intlistenSucceed=sockSrvr.Listen();开始监听if(listenSucceed=0)(AfxMessageBox("_ListenTcpThreadListen错误!"+pDlg->GetError(GetLastError();return-1;CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);

11、intacceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);接受连接并取得对方IPif(acceptSucceed=0)(AfxMessageBox("_ListenTcpThreadAccept错误!"+pDlg->GetError(GetLastError();return-1;sockSrvr.Close();/关闭charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;

12、if(pDlg->m_type='D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;2 .传送文件线程函数UINT_SendFileThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CSt

13、ringip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip,PORT);首先发送标记F为文件,2intend=0;end=sockClient.Send("F",FLAG);/发送标志是否成功if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox("文件头错误");r

14、eturn-1;/CFilemyFile;FILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile:modeRead|CFile:typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(myFileInfo.fileName,myFile.GetFileName();/得到文件名称sockClient.Send(&myFileInfo,sizeof(myFileInfo);发送文件信息pDlg->m_Progress.Set

15、Range32(0,myFileInfo.fileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);)n

16、um=myFile.Read(m_buf,SIZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDlg->FileWork=false;break;)if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError

17、();break;)pDlg->m_Progress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp=myFileInfo.fileLength)AfxMessageBox("文件发送成功");elseAfxMessageBox("文件发送失败");myFile.Close();sockClient.Close()

18、;pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)3.发送消息线程函数UINT_Sen

19、dMsgThread(LPVOIDlparam)/TCP发送信息线程CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_YourIp.GetWindowText(ip);intconn=sockClient.Connect(ip,PORT);if(conn=0)/AfxMessageBox("_SendMsgThreadConnect错误!"

20、;+pDlg->GetError(GetLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;首先发送标记M为信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox

21、("消息头错误");return-1;CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;inti=0;sockClient.Close();return0;4.文件接收处理函数intCFiletranDlg:SaveYourFile(CSocket&

22、;recSo,SOCKADDR_IN&client)CStringfname;CFileDialogdlg(false);另存文件FILEINFOmyFileInfo;recSo.Receive(&myFileInfo,sizeof(FILEINFO);intfileLength=myFileInfo.fileLength;CStringstrfileIp,strfileName,strfileLength;strfileIp.Format(inet_ntoa(client.sin_addr);strfileName.Format(myFileInfo.fileName);st

23、rfileLength.Format("%f",myFileInfo.fileLength/1024.0);CStringtitle="文件"+strfileName+"大小"+strfileLength+"KB"+"来在"+strfileIp+"是否接受"dlg.m_ofn.lpstrTitle=title;/标题条charfileme500=0;必须足够大小strcpy(fileme,strfileIp+strfileName);dlg.m_ofn.lpstrFile=f

24、ileme;文件名称if(dlg.DoModal()=IDOK)fname=dlg.GetPathName();得到文件名名称、路径GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_SHOW);elseGetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);GetDlgItem(IDCANCEL)->EnableWindow(true);recSo.Close

25、();return0;charbufSIZEFILE=0;CFilef(fname,CFile:modeCreate|CFile:modeWrite);存文件m_Progress.SetRange32(0,fileLength);intn=0;接受的字节数0表示结束inttemp=0;GetDlgItem(IDCANCEL)->EnableWindow(false);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);for(;)n=recSo.Receive(buf,SIZEFILE);接受if(n=0)/0表示结束bre

26、ak;接受完毕f.Write(buf,n);temp+=n;m_Progress.SetPos(temp);if(FileWork=false)FileWork=true;if(FileStop=true)FileStop=false;FileWork=false;break;f.Close();m_Progress.SetPos(0);if(temp=fileLength)MessageBox("文件接受成功");elseMessageBox("文件接受失败");FileWork=false;GetDlgItem(IDC_PROGRESS_SEND_F

27、ILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDCANCEL)->EnableWindow(true);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;四、课程设计总结采用多线程方法,利用MFC的CSocket类,可以简单方便的实现计算机用户间的文件传输和消息发送功能.以上的程序在VisualC+6.0环境编译通过,并且在学校机房内(本机和本机、本机和他机之间)测试能到

28、达根本的要求.当然我们可以通过继续增加线程来进一步拓展程序的功能.指导教师评语:成绩:指导教师:添加的代码:#include"stdafx.h"#include"Filetran.h"#include"FiletranDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE口=_FILE_;#endif#definePORT34567#defineSIZEFILE1024#defineFLAG2CWinThread*pThreadSendFile;C

29、WinThread*pThreadListen;CWinThread*pThreadSendMsg;CFiletranDlg二CFiletranDlg(CWnd*pParent/*=NULL*/):CDialog(CFiletranDlg:IDD,pParent)/AFX_DATA_INIT(CFiletranDlg)m_MsgSend=_T("");message=_T("");/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGet

30、App()->LoadIcon(IDR_MAINFRAME);FileWork=FileStop=false;StopServer=false;voidCFiletranDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFiletranDlg)DDX_Control(pDX,IDC_PROGRESS_SEND_FILE,m_Progress);DDX_Control(pDX,IDC_YOURIP,m_YourIp);DDX_Control(pDX,IDC_MYIP,m_MyIp)

31、;DDX_Text(pDX,IDC_EDIT_MSG,m_MsgSend);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CFiletranDlg,CDialog)/AFX_MSG_MAP(CFiletranDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTONCONNECT,OnButtonconnect)ON_BN_CLICKED(IDC_BUTTON_DISCONNECT,OnButtonDisconnect)ON_BN_CLICKED(IDC_BUTTON_SEND

32、_FILE,OnButtonSendFile)ON_BN_CLICKED(IDC_BUTTON_STOP,OnButtonStop)ON_BN_CLICKED(IDC_BUTTON_SENDMSG,OnButtonSendmsg)/AFX_MSG_MAPEND_MESSAGE_MAP()BOOLCFiletranDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX&0xFFF0)=IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemM

33、enu(FALSE);if(pSysMenu!=NULL)CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);SetIcon(m_hIcon,TRUE);/SetbigiconSetIcon(m_hIcon,FALSE);/SetsmalliconCStringstrLocalName

34、;GetLocalHostName(strLocalName);CStringstrLocalIP;GetIpAddress(strLocalName,strLocalIP);m_MyIp.SetWindowText(strLocalIP);得到本地的ipCStringtext="MyProgramTCP方式;SetWindowText(text);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);/断开不可用GetDlgItem(IDC_BUTTONCONNECT)->EnableWindow(true);/连

35、接可用GetDlgItem(IDC_BUTTON_SEND_FILE)->EnableWindow(false);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDC_BUTTON_SENDMSG)->EnableWindow(false);returnTRUE;/returnTRUEunlessyousetthefocustoacontrolvoidCFiletranDlg:OnSysCommand(UINTnID,LPARAMlParam)if(nID&0xFFF0)=IDM_ABOUTBO

36、X)CAboutDlgdlgAbout;dlgAbout.DoModal();)else(CDialog:OnSysCommand(nID,lParam);)voidCFiletranDlg:OnPaint()(if(IsIconic()(CPaintDCdc(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);intcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRect

37、rect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cylcon+1)/2;dc.DrawIcon(x,y,m_hlcon);).else(CDialog:OnPaint();)HCURSORCFiletranDlg:OnQueryDragIcon()(return(HCURSOR)m_hIcon;).UINT_ListenTcpThread(LPVOIDlparam)(.CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopS

38、erver=true)return-1;CSocketsockSrvr;pDlg->m_Potr=PORT;/保存当前使用端口,用于关闭intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)(AfxMessageBox("_ListenTcpThreadCreate错误!"+pDlg->GetError(GetLastError();return-1;)intlistenSucceed=sockSrvr.Listen();开始监听if(listenSucceed=0)AfxMes

39、sageBox("_ListenTcpThreadListen错误!"+pDlg->GetError(GetLastError();return-1;)CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);intacceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);if(acceptSucceed=0)AfxMessageBox("_ListenTcpThreadAccept错误!"+pDl

40、g->GetError(GetLastError();return-1;)sockSrvr.Close();/厌闭charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;if(pDlg->m_type='D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;UINT_SendFileThread(LPVOI

41、Dlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip,PORT);/首先发送标记F为文件,2intend=0;end=sockClient.Send("F",FLAG);/发送标志是否成功if(end=SOCKET_ERROR)(AfxMessageB

42、ox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)(AfxMessageBox("文件头错误");return-1;CFilemyFile;FILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile二modeRead|CFile二typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(

43、myFileInfo.fileName,myFile.GetFileName();/得到文件名称sockClient.Send(&myFileInfo,sizeof(myFileInfo);发送文件信息pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=

44、true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);num=myFile.Read(m_buf,SIZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDl

45、g->FileWork=false;break;)if(end=SOCKET_ERROR)(AfxMessageBox("_SendFileThreadSend错误!"+pDlg->GetError(GetLastError();break;)pDlg->m_Progress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp

46、=myFileInfo.fileLength)AfxMessageBox("文件发送成功");elseAfxMessageBox("文件发送失败");myFile.Close();sockClient.Close();pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgIte

47、m(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)UINT_SendMsgThread(LPVOIDlparam)/TCP发送信息线程(CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_Yo

48、urIp.GetWindowText(ip);intconn=sockClient.Connect(ip,PORT);if(conn=0)/(AfxMessageBox("_SendMsgThreadConnect错误!"+pDlg->GetError(GetLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;)/首先发送标记M为信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_E

49、RROR)AfxMessageBox("_SendMsgThreadSend错误!"+pDlg->GetError(GetLastError();return-1;)elseif(end!=2)AfxMessageBox("消息头错误");return-1;)CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend错误!"+pD

50、lg->GetError(GetLastError();return-1;)inti=0;sockClient.Close();return0;)intCFiletranDlg:GetLocalHostName(CString&sHostName)charszHostName256;intnRetCode;nRetCode=gethostname(szHostName,sizeof(szHostName);if(nRetCode!=0)sHostName=_T('没有取得!");returnGetLastError();)sHostName=szHostName;return0;)intCFiletranDlg:GetIpAddress(constCString&sHostName,CString&sIpAddress)HOSTENT*pHe;pHe=gethostbyname(sHostName);structin_addrinAddr;inAddr.s_addr=*(unsignedlong*)pHe->h_addr_list0);sIpAddress=inet_ntoa(inAddr);if(sIpAddress.IsEmpty()sIpAddress=_T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论