東南大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)第四次實(shí)驗(yàn)_第1頁(yè)
東南大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)第四次實(shí)驗(yàn)_第2頁(yè)
東南大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)第四次實(shí)驗(yàn)_第3頁(yè)
東南大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)第四次實(shí)驗(yàn)_第4頁(yè)
東南大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)第四次實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、東南大學(xué)自動(dòng)化學(xué)院實(shí)驗(yàn)報(bào)告課程名稱:信息通信網(wǎng)絡(luò)概論第 4 次實(shí)驗(yàn)實(shí)驗(yàn)名稱:設(shè)計(jì)協(xié)議院 (系):自動(dòng)化專業(yè):自動(dòng)化姓名:學(xué)號(hào):實(shí)驗(yàn)室:金智樓實(shí)驗(yàn)組別:同組人員:實(shí)驗(yàn)時(shí)間:2013年 12月 23 日評(píng)定成績(jī):審閱教師:目錄一實(shí)驗(yàn)?zāi)康暮鸵?,3二實(shí)驗(yàn)原理 ,3三實(shí)驗(yàn)方案與實(shí)驗(yàn)步驟 ,4四實(shí)驗(yàn)設(shè)備與器材配置 ,5五實(shí)驗(yàn)記錄 ,5六實(shí)驗(yàn)總結(jié) ,9七思考題或討論題 ,9- 2 -一實(shí)驗(yàn)?zāi)康暮鸵竽康模?.設(shè)計(jì)簡(jiǎn)單的應(yīng)用層協(xié)議,2.開(kāi)發(fā)基于 TCP/IP 或 UDP/IP 的網(wǎng)絡(luò)通信程序,實(shí)現(xiàn)數(shù)據(jù)傳送和文件傳輸。要求:1.正確理解應(yīng)用層協(xié)議的概念;2.更深入了解客戶 /服務(wù)器模式的網(wǎng)絡(luò)程序設(shè)計(jì)。二實(shí)驗(yàn)

2、原理1.應(yīng)用層協(xié)議應(yīng)用層協(xié)議的定義包括如下內(nèi)容:(1) 交換的報(bào)文類型,如請(qǐng)求報(bào)文和響應(yīng)報(bào)文;(2) 各種報(bào)文類型的語(yǔ)法,如報(bào)文中的各個(gè)字段公共詳細(xì)描述;(3) 字段的語(yǔ)義,即包含在字段中信息的含義;(4) 進(jìn)程何時(shí)、如何發(fā)送報(bào)文及對(duì)報(bào)文進(jìn)行響應(yīng)。有些應(yīng)用層協(xié)議是由RFC 文檔定義的,因此它們位于公共領(lǐng)域。例如,web 的應(yīng)用層的協(xié)議HTTP(超文本傳輸協(xié)議, RFC 2616) 就作為一個(gè) RFC 供大家使用。如果瀏覽器開(kāi)發(fā)者遵從HTTPRFC 規(guī)則,所開(kāi)發(fā)出的瀏覽器就能訪問(wèn)任何遵從該文檔標(biāo)準(zhǔn)的web,服務(wù)器并獲取相應(yīng)的web頁(yè)面。還有很多別的應(yīng)用層協(xié)議是專用的不能隨意應(yīng)用于公共領(lǐng)域。例如,

3、很多現(xiàn)有的 P2P文件共享系統(tǒng)使用的是專用應(yīng)用層協(xié)議。目的,應(yīng)用層協(xié)議主要有以下幾種。2) SOCKET 編程服務(wù)器要?jiǎng)?chuàng)建一個(gè)用于偵聽(tīng)的套接字,為該套接字分配地址之后,調(diào)用 listen()函數(shù)使它處于偵聽(tīng)狀態(tài);客戶機(jī)在創(chuàng)建套接字完畢后,為套接字分配地址,然后調(diào)用connect() 函數(shù),請(qǐng)求與服務(wù)器套接字連接;服務(wù)器套接字在收到客戶機(jī)的連接請(qǐng)示后,調(diào)用accept()函數(shù), 該函數(shù)創(chuàng)建一個(gè)用于連接的套接字。應(yīng)用該套接字和客戶機(jī)上的連接套接字,用戶就可以在服務(wù)器和客戶機(jī)之間進(jìn)行數(shù)據(jù)傳輸了。在結(jié)束傳輸之后,客戶機(jī)調(diào)用closesocket()函數(shù)關(guān)閉套接字,服務(wù)器也調(diào)用該函數(shù)關(guān)閉用于偵聽(tīng)和連接的

4、套接字。- 3 -客戶機(jī)服務(wù)器偵聽(tīng)套接字連接套接字Socket()Socket()Bind()Bind()Listen()Connect()Accept()創(chuàng)建連接套接字Send()Recv()Recv()Send()Closesocket()Closesocket()Closesocket()三實(shí)驗(yàn)方案與實(shí)驗(yàn)步驟1.基于 TCP 的 socket 編程1)服務(wù)端1)建立 Socket 初始化 WinSock 的動(dòng)態(tài)連接庫(kù)后,需要在服務(wù)器端建立一個(gè)監(jiān)聽(tīng)的Socket ,為此可以調(diào)用 Socket()函數(shù)用來(lái)建立這個(gè)監(jiān)聽(tīng)的Socket ,并定義此 Socket所使用的通信協(xié)議。此函數(shù)調(diào)用成功返回

5、Socket 對(duì)象,失敗則返回INVALID_SOCKET(調(diào)用 WSAGetLastError() 可得知原因, 所有 WinSocket 的函數(shù)都可以使用這個(gè)函數(shù)來(lái)獲取失敗的原因 ) 。2)綁定端口接下來(lái)要為服務(wù)器端定義的這個(gè)監(jiān)聽(tīng)的Socket 指定一個(gè)地址及端口(Port ),這樣客戶端才知道待會(huì)要連接哪一個(gè)地址的哪個(gè)端口,為此我們要調(diào)用bind() 函數(shù),該函數(shù)調(diào)用成功返回 0,否則返回 SOCKET_ERROR。監(jiān)聽(tīng) 當(dāng)服務(wù)器端的 Socket 對(duì)象綁定完成之后 , 服務(wù)器端必須建立一個(gè)監(jiān)聽(tīng)的隊(duì)列來(lái)接收客戶端的連接請(qǐng)求。 listen() 函數(shù)使服務(wù)器端的 Socket 進(jìn)入監(jiān)聽(tīng)狀態(tài)

6、,并- 4 -設(shè)定可以建立的最大連接數(shù) ( 目前最大值限制為 5, 最小值為 1) 。該函數(shù)調(diào)用成功返回0,否則返回 SOCKET_ERROR。服務(wù)器端的 Socket 調(diào)用完 listen ()后,如果此時(shí)客戶端調(diào)用 connect ()函數(shù)提出連接申請(qǐng)的話, Server 端必須再調(diào)用 accept() 函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動(dòng)作。為了知道什么時(shí)候客戶端提出連接要求,從而服務(wù)器端的Socket 在恰當(dāng)?shù)臅r(shí)候調(diào)用 accept()函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒng)主動(dòng)來(lái)通知我們有客戶端提出連接請(qǐng)求了。該函數(shù)調(diào)用成功返回0

7、,否則返回SOCKET_ERROR。4)服務(wù)器端接受客戶端的連接請(qǐng)求當(dāng) Client 提出連接請(qǐng)求時(shí),Server端 hwnd 視窗會(huì)收到 Winsock Stack送來(lái)我們自定義的一個(gè)消息,這時(shí),我們可以分析lParam ,然后調(diào)用相關(guān)的函數(shù)來(lái)處理此事件。為了使服務(wù)器端接受客戶端的連接請(qǐng)求,就要使用 accept() 函數(shù),該函數(shù)新建一 Socket 與客戶端的 Socket 相通,原先監(jiān)聽(tīng)之Socket 繼續(xù)進(jìn)入監(jiān)聽(tīng)狀態(tài), 等待他人的連接要求。 該函數(shù)調(diào)用成功返回一個(gè)新產(chǎn)生的 Socket 對(duì)象,否則返回 INVALID_SOCKET。結(jié)束 socket連接結(jié)束服務(wù)器和客戶端的通信連接是很

8、簡(jiǎn)單的,這一過(guò)程可以由服務(wù)器或客戶機(jī)的任一端啟動(dòng), 只要調(diào)用 closesocket() 就可以了,而要關(guān)閉 Server 端監(jiān)聽(tīng)狀態(tài)的 socket ,同樣也是利用此函數(shù)??蛻舳?建立客戶端的 Socket 客戶端應(yīng)用程序首先也是調(diào)用WSAStartup()函數(shù)來(lái)與Winsock 的動(dòng)態(tài)連接庫(kù)建立關(guān)系,然后同樣調(diào)用 socket()來(lái)建立一個(gè) TCP 或 UDPsocket (相同協(xié)定的 sockets 才能相通, TCP 對(duì) TCP, UDP 對(duì) UDP)。與服務(wù)器端的 socket 不同的是,客戶端的 socket 可以調(diào)用 bind() 函數(shù),由自己來(lái)指定 IP 地址及port 號(hào)碼;

9、但是也可以不調(diào)用 bind() ,而由 Winsock 來(lái)自動(dòng)設(shè)定 IP 地址及 port 號(hào)碼。2)提出連接申請(qǐng)客戶端的 Socket 使用 connect() 函數(shù)來(lái)提出與服務(wù)器端的Socket建立連接的申請(qǐng),函數(shù)調(diào)用成功返回0,否則返回 SOCKET_ERROR。lleted_92ee3876-c0cb-4c7e-85ab-3a2b5523d757-Bulleted_07%5030878-a36f-444f-a9b2-2e086501a1cc-Bulleted_7eb03016-e171-4a74數(shù)據(jù)的傳送 雖然基于 TCP/IP 連接協(xié)議 (流套接字) 的服務(wù)是設(shè)計(jì)客戶機(jī) / 服務(wù)器應(yīng)

10、用程序時(shí)的主流標(biāo)準(zhǔn),但有些服務(wù)也是可以通過(guò)無(wú)連接協(xié)議(數(shù)據(jù)報(bào)套接字)提供的。2.基于 UDP 的 socket 編程服務(wù)器端1:創(chuàng)建套接字(create)2:將套接字綁定到一個(gè)本地地址和端口上(bind )3:等待接收數(shù)據(jù)(recvfrom )4:關(guān)閉套接字客戶端1:創(chuàng)建套接字(create )2:向服務(wù)器發(fā)送數(shù)據(jù)(sendto)3:關(guān)閉套接字四實(shí)驗(yàn)設(shè)備與器材配置計(jì)算機(jī)一臺(tái)、軟件Microsoft Visual Studio 6.0- 5 -五實(shí)驗(yàn)記錄打開(kāi)兩個(gè)應(yīng)用程序,一個(gè)選擇“服務(wù)器” ,并且點(diǎn)擊“偵聽(tīng)” ;另外一個(gè)選擇“客戶端” ,并且點(diǎn)擊“連接” ,此時(shí)兩個(gè)程序的消息發(fā)送窗口的信息框變?yōu)?/p>

11、可寫,輸入消息可以進(jìn)行客戶端 -服務(wù)器之間的發(fā)送和接收,發(fā)送和接收的消息可以存儲(chǔ)在信息框內(nèi)。- 6 -客戶端和服務(wù)器端可以互發(fā)信息:輸入框輸入/n 和 /p,接收到的為指定的圖像:- 7 -主要代碼如下:- 8 -void CProject2Dlg:OnSelchangeComboCs()dc5-9da2-0c6f4fe60ac6-Bulleted_fdd54282-3d1a-4d68-b7 TODO: Add your control notification handler code here intset = m_cs_set.GetCurSel();if(set=1)m_server=

12、FALSE; this-GetDlgItem(IDC_SET_IPADDR)-EnableWindow(TRUE); m_set_ip=;UpdateData(false); this-SetDlgItemText(IDC_CONNECT, 連接 ); this-SetWindowText(TCP/IP 通信客戶端 );else if(set=0)m_server=TRUE;m_set_ip= ;this-GetDlgItem(IDC_SET_IPADDR)-EnableWindow(FALSE);UpdateData(FALSE);this-SetDlgItemText(I

13、DC_CONNECT,偵聽(tīng) );this-SetWindowText(TCP/IP通信服務(wù)器端);void CProject2Dlg:OnConnect()TODO: Add your control notification handler codehere UpdateData(TRUE);int retb,ret,retc;SOCKADDR_IN addr;BOOL nret; CStringServerIP;ServerIP=m_set_ip;if(m_active=TRUE)return;if(m_server=TRUE)if( (m_set_port)4096) )AfxMessa

14、geBox( 請(qǐng)輸入合理的端口號(hào)!);- 9 -ret=m_listensocket.Create(m_set_port,SOCK_STREAM);if(ret = false)m_static_state=無(wú)法建立服務(wù)器!;UpdateData(FALSE);m_listensocket.Close();retb=m_listensocket.Listen(5);if(retb=false)m_static_state=無(wú)法偵聽(tīng) !;UpdateData(FALSE);m_static_state= 服務(wù)器建立成功 ! 正在偵聽(tīng) ,;m_list_msg.ResetContent();m_l

15、ist_msg.AddString(= 服務(wù)器正在偵聽(tīng),);this-GetDlgItem(IDC_CONNECT)-EnableWindow(FALSE);this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(FALSE);UpdateData(FALSE);m_active=TRUE;elseServerIP.TrimLeft();ServerIP.TrimRight();if( inet_addr(ServerIP)= INADDR_NONE)AfxMessageBox( 請(qǐng)輸入正確的服務(wù)器IP 地址 !);if( (m_set_port)4096) )A

16、fxMessageBox( 請(qǐng)輸入合理的端口號(hào)!);retc=m_connectsocket.Create(0,SOCK_STREAM);if(retc = false)m_static_state=無(wú)法建立客戶端!;UpdateData(FALSE);m_connectsocket.Close();addr.sin_family=AF_INET;-10-addr.sin_port=htons(m_set_port);addr.sin_addr.S_un.S_addr = inet_addr(m_set_ip);nret=m_connectsocket.Connect(SOCKADDR *)&

17、amp;addr,sizeof(SOCKADDR);if(nret=TRUE )AfxMessageBox( 連接服務(wù)器失敗!);m_connectsocket.Close();elsem_static_state=正在連接服務(wù)器,;this-GetDlgItem(IDC_CONNECT)-EnableWindow(FALSE);this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(FALSE);UpdateData(FALSE);m_active=TRUE;void CProject2Dlg:OnServerAccept()if(m_active=TRUE)m

18、_listensocket.Accept(m_connectsocket,NULL,NULL);m_static_state=客戶端已連接上;m_list_msg.AddString(= 客戶端連接成功!);UpdateData(FALSE);CString welcome(Welcome my friend!);m_connectsocket.Send(welcome,welcome.GetLength();void CProject2Dlg:OnClientConnect(int nErrorCode)sockaddr_in name;int len;CString buf;if(m_ac

19、tive=TRUE)if(nErrorCode!=0)m_list_msg.AddString( 連接服務(wù)器錯(cuò)誤!);-11-m_static_state=服務(wù)器連接錯(cuò)誤,;this-GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE);this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(TRUE);UpdateData(FALSE);m_active=FALSE;m_connectsocket.Close();elselen=sizeof(sockaddr_in);m_connectsocket.GetPeerName(SOC

20、KADDR*)&name,&len);m_list_msg.ResetContent();buf= 成功連接上服務(wù)器;buf+=inet_ntoa(name.sin_addr);m_list_msg.AddString(buf);m_static_state=服務(wù)器連接成功!;UpdateData(FALSE);CString welcome(I am );welcome+=CLIENT;m_connectsocket.Send(welcome,welcome.GetLength();void CProject2Dlg:OnServerClose()m_connectsocke

21、t.Close();m_static_state=正在偵聽(tīng),;m_list_msg.ResetContent();m_list_msg.AddString(=客戶端已退出,);m_list_msg.AddString(=服務(wù)器正在偵聽(tīng),);UpdateData(FALSE);void CProject2Dlg:OnSocketClose()if(m_active=FALSE)return;if(m_server=TRUE)OnServerClose();else-12-OnClientClose();void CProject2Dlg:OnClientClose()m_connectsocke

22、t.Close();m_list_msg.ResetContent();m_list_msg.AddString( 服務(wù)器已斷開(kāi)。成功退出,);m_static_state=已斷開(kāi)連接,;this-GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE);this-GetDlgItem(IDC_COMBO_CS)-EnableWindow(TRUE);UpdateData(FALSE);m_active=FALSE;void CProject2Dlg:OnSocketReceive()if(m_server=TRUE)OnServerReceive();elseOn

23、ClientReceive();void CProject2Dlg:OnServerReceive()BOOL Act=FALSE;CString nRev,nret;char bufMAX_BUFFER+1;int ret,i,len;ret=m_connectsocket.Receive(buf,MAX_BUFFER,0);if(ret!=SOCKET_ERROR)bufret=NULL;nRev=buf;nret+=CLIENT;nret+=:;len=nret.GetLength();nret=nRev.Right( ( (nRev.GetLength()-len ) );-13-if

24、(nret.GetAt(0)=/)Act=DoAction(nret);if(Act=FALSE)m_list_msg.AddString(LPCTSTR)nRev);i=m_list_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);elseAfxMessageBox( 消息接收錯(cuò)誤!);void CProject2Dlg:OnClientReceive()char bufMAX_BUFFER+1;BOOL Act=FALSE;int ret,i,len;CString nR

25、ev,nret;ret=m_connectsocket.Receive(buf,MAX_BUFFER,0);if(ret!=SOCKET_ERROR)bufret=NULL;nRev=buf;nret+=SERVER;nret+=:;len=nret.GetLength();nret=nRev.Right( ( (nRev.GetLength()-len ) );if(nret.GetAt(0)=/)Act=DoAction(nret);if(Act=FALSE)m_list_msg.AddString(LPCTSTR)nRev);i=m_list_msg.GetCount();m_list_

26、msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);-14-elseAfxMessageBox( 消息接收錯(cuò)誤!);void CProject2Dlg:OnSendMsg()TODO: Add your control notification handler codehere CString buf;int nret;BOOL Act=FALSE;int nLen,i;UpdateData(TRUE);m_outmsg.TrimLeft();if(m_outmsg.IsEmpty()AfxMessageBox( 對(duì)不起,

27、不能發(fā)送空消息!);return;if(m_server=TRUE)buf+=SERVER;buf+=:;elsebuf+=CLIENT;buf+=:;buf+=m_outmsg;nLen=buf.GetLength();nret = m_connectsocket.Send(LPCTSTR)buf,nLen);if(nret!=SOCKET_ERROR)if(m_outmsg.GetAt(0)=/)Act=DoAction(m_outmsg);if(Act=FALSE)m_list_msg.AddString(LPCTSTR)buf);-15-m_outmsg.Empty();i=m_lis

28、t_msg.GetCount();m_list_msg.SetCurSel(i-1);m_list_msg.SetCurSel(-1);UpdateData(FALSE);elseAfxMessageBox( 消息發(fā)送失敗!:();m_sListenSocket.Accept(m_sConnectSocket);/激活消息輸入和相關(guān)控件GetDlgItem(IDC_EDIT_MSG)-EnableWindow(TRUE);GetDlgItem(IDOK)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_MSG)-EnableWindow(TRUE);void

29、CTalkDlg:OnConnect()/對(duì)于客戶機(jī)GetDlgItem(IDC_EDIT_MSG)-EnableWindow(TRUE);GetDlgItem(IDOK)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_MSG)-EnableWindow(TRUE);GetDlgItem(IDC_BTN_CLOSE)-EnableWindow(TRUE);void CTalkDlg:OnReceive()char* pBuf = new char1025;/char pBuf1025;int nBufSize = 1024;int nReceived;CSt

30、ring strReceived;/接收消息nReceived = m_sConnectSocket.Receive(pBuf,nBufSize);/判斷消息接收是否成功?if(nReceived!=SOCKET_ERROR)/保留接收消息的有效部分pBufnReceived = NULL;/將消息轉(zhuǎn)化為CString 對(duì)象strReceived = pBuf;/將消息添加到“已接收的消息”列表框m_listReceived.AddString(strReceived);/更新對(duì)話框UpdateData(FALSE);-16-elseAfxMessageBox( 信息接收錯(cuò)誤!,MB_OK|M

31、B_ICONSTOP);delete pBuf;void CTalkDlg:OnSendMsg()int nLen;/ 消息長(zhǎng)度int nSent;/已發(fā)送消息的長(zhǎng)度/從對(duì)話框取回?cái)?shù)據(jù)UpdateData(TRUE);/判斷要發(fā)送的消息是否為空if(!m_strMsg.IsEmpty()/獲取消息的長(zhǎng)度nLen = m_strMsg.GetLength();/發(fā)送消息nSent = m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen);/發(fā)送是否成功if(nSent!=SOCKET_ERROR)將消息添加到“已發(fā)送列表框”m_listSent.AddStr

32、ing(m_strMsg);更新對(duì)話框UpdateData(FALSE);elseAfxMessageBox( 信息發(fā)送錯(cuò)誤 ,MB_OK|MB_ICONSTOP);/清除當(dāng)前信息m_strMsg.Empty();/更新對(duì)話框UpdateData(FALSE);void CTalkDlg:OnClose()/關(guān)閉連接的套接字m_sConnectSocket.Close();/禁用消息輸入和發(fā)送的相關(guān)控件GetDlgItem(IDC_EDIT_MSG)-EnableWindow(FALSE);GetDlgItem(IDOK)-EnableWindow(FALSE);-17-GetDlgItem(

33、IDC_STATIC_MSG)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_CLOSE)-EnableWindow(FALSE);/清除列表框內(nèi)容while(m_listSent.GetCount()!=0)m_listSent.DeleteString(0);while(m_listReceived.GetCount()!=0)m_listReceived.DeleteString(0);/是否為客戶機(jī)if(m_cmbType.GetCurSel()=0)/對(duì)于客戶機(jī)/激活與連接設(shè)置相關(guān)的控件GetDlgItem(IDC_BTN_CONNECT)-Enabl

34、eWindow(TRUE);GetDlgItem(IDC_EDIT_SERVNAME)-EnableWindow(TRUE);GetDlgItem(IDC_EDIT_SERVPORT)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_SERVNAME)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_SERVPORT)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_TYPE)-EnableWindow(TRUE);GetDlgItem(IDC_COMBO_TYPE)-EnableWindow(TRUE);六

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論