2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  TCP/IP課程設(shè)計(jì)</p><p>  設(shè)計(jì)題目:基于套接字的客戶機(jī)/服務(wù)器程序設(shè)計(jì)</p><p><b>  班 級(jí): </b></p><p><b>  學(xué) 號(hào):</b></p><p><b>  姓 名: </b><

2、/p><p><b>  指導(dǎo)老師: </b></p><p><b>  年 月 日</b></p><p>  基于套接字的客戶機(jī)/服務(wù)器程序設(shè)計(jì)</p><p><b>  一.設(shè)計(jì)目的:</b></p><p>  理解客戶機(jī)/服務(wù)器模型的工作

3、原理;</p><p><b>  掌握套接字的概念;</b></p><p>  掌握基于套接字的面向連接和無連接客戶機(jī)/服務(wù)器程序的設(shè)計(jì)原理和相關(guān)的WinSock API函數(shù);</p><p>  掌握基于TCP和UDP的程序設(shè)計(jì)方法。</p><p><b>  二.設(shè)計(jì)內(nèi)容:</b><

4、/p><p>  基于TCP的應(yīng)用編程:編寫一個(gè)Client/Server程序?qū)?,服?wù)器程序負(fù)責(zé)接收客戶機(jī)進(jìn)程的連接請(qǐng)求,并在服務(wù)器進(jìn)程與客戶機(jī)進(jìn)程之間建立通信連接,然后接收客戶機(jī)進(jìn)程的傳送數(shù)據(jù)并將其顯示在服務(wù)器端,同時(shí)將歡迎信息發(fā)送給客戶機(jī)進(jìn)程,最后關(guān)閉該客戶機(jī)進(jìn)程的連接;客戶機(jī)進(jìn)程首先提出對(duì)指定服務(wù)器的連接請(qǐng)求,建立連接后向服務(wù)器進(jìn)程發(fā)送已經(jīng)建立連接的數(shù)據(jù)信息,同時(shí)接收服務(wù)器進(jìn)程發(fā)送過來的數(shù)據(jù)并顯示在客戶端。采用

5、WinSock API實(shí)現(xiàn)代碼。</p><p>  基于UDP的應(yīng)用編程:實(shí)現(xiàn)一個(gè)基于UDP的客戶機(jī)/服務(wù)器程序,通過設(shè)定不同的命令行參數(shù)來確定應(yīng)用進(jìn)程的不同角色,即充當(dāng)客戶機(jī)進(jìn)程還是服務(wù)器進(jìn)程。當(dāng)兩個(gè)進(jìn)程運(yùn)行后,彼此之間可以輪流發(fā)送消息,對(duì)方接收后顯示出來。</p><p><b>  三.原理分析:</b></p><p> ?。ㄒ唬┨捉?/p>

6、字的概念:</p><p>  套接字(Socket) 1. Socket的出現(xiàn),使得程序員可以很方便的訪問TCP/IP,從而開發(fā)各種網(wǎng)絡(luò)應(yīng)用的程序 2. 套接字存在于通信區(qū)域中,通信區(qū)域也叫地址族,他是一個(gè)抽象的概念,主要用于通過套接字通信的進(jìn)程的共有特性綜合在一起。套接字通常只與同一個(gè)區(qū)域的套接字交換數(shù)據(jù)。 套接字的類型 1. 流式套接字(SOCK_STREAM) 提供面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)

7、,數(shù)據(jù)無差錯(cuò),無重復(fù)的發(fā)送,且按發(fā)送的順序接收,基于TCP協(xié)議 ;2. 數(shù)據(jù)保式套接字(SOCK_DGRAM) 提供無連接的服務(wù),數(shù)據(jù)包以獨(dú)立包形式發(fā)送,不提供無錯(cuò)誤的保證,數(shù)據(jù)可能丟失或重復(fù),且接收順序混亂,基于UDP協(xié)議。</p><p>  (二)WinSock應(yīng)用程序接口:</p><p>  WinSock是一個(gè)基于套接字模型的API(應(yīng)用程序接口),在Microsoft W

8、indows操作系統(tǒng)類中使用。它在Berkekley接口函數(shù)的基礎(chǔ)上,還增加了基于消息驅(qū)動(dòng)機(jī)制的Windows擴(kuò)展函數(shù)。其中WinSock 1.1只支持TCP/IP網(wǎng)絡(luò),WinSock2.0則增加了對(duì)更多協(xié)議的支持。WinSock包括以下3類的函數(shù):</p><p>  1.WinSock API包含的Berkeley Socket函數(shù)。這類函數(shù)分兩部分,其一是用于網(wǎng)絡(luò)I/P的函數(shù);其二是不涉及網(wǎng)絡(luò)I/O,在本地

9、端完成的函數(shù)。</p><p>  2.檢索有關(guān)域名,通信服務(wù)和協(xié)議等Internet信息的數(shù)據(jù)庫函數(shù)。</p><p>  3.Berkekley Socket API的Windows轉(zhuǎn)用的擴(kuò)展函數(shù)。</p><p><b>  (三)工作模型</b></p><p>  網(wǎng)絡(luò)應(yīng)用程序一般是以客戶機(jī)/服務(wù)器的模型的方式

10、工作的。而因特網(wǎng)便是客戶機(jī)/服務(wù)器模型的一個(gè)典型應(yīng)用。在這種工作方式中,一個(gè)服務(wù)器程序通常事先啟動(dòng),并在一個(gè)熟知端口偵聽對(duì)服務(wù)器的請(qǐng)求,如FTP服務(wù)器,Web服務(wù)器等。當(dāng)客戶機(jī)應(yīng)用程序需要某種服務(wù)時(shí),需向提供這種服務(wù)的服務(wù)器發(fā)出請(qǐng)求,服務(wù)器在接收到請(qǐng)求后,向客戶機(jī)發(fā)出相應(yīng)請(qǐng)求信息。這樣客戶機(jī)應(yīng)用程序和服務(wù)器程序之間便建立了通信連接,此后可以進(jìn)行數(shù)據(jù)通信。通信任務(wù)完成后需要關(guān)閉它們之間的通信連接?;赥CP(面向連接)和基于UDP(面向非

11、連接)應(yīng)用程序的工作流程如下所示:</p><p><b>  四.總體設(shè)計(jì):</b></p><p>  (一)基于TCP(面向連接)的Socket編程:服務(wù)器端順序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 將套接字綁定到一個(gè)本地地址和端口上(bind) 4. 將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶請(qǐng)求(listen) 5. 等待客戶請(qǐng)

12、求的到來;當(dāng)請(qǐng)求帶來后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字(accept) 6. 用返回的套接字和客戶端進(jìn)行通信(send/recv) 7. 返回,等待另一個(gè)客戶請(qǐng)求 8. 關(guān)閉套接字(closesocket) 客戶端程序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 向服務(wù)器發(fā)送連接請(qǐng)求(connect) 4. 和服務(wù)器端進(jìn)行通信(send/receive) 5. 關(guān)閉套接字(close

13、socket) (二)基于UDP(面向無連接)的socket編程 :服務(wù)器端(接收端)程序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 將套接字綁定到一個(gè)本地地址和端口上(bind) 4. 等待接收數(shù)據(jù)(recvfrom) 5. 關(guān)閉套接字(closesocket)</p><p><b>  五.詳細(xì)設(shè)計(jì):</b></p><p> 

14、 (一).基于TCP的服務(wù)器/客戶機(jī)程序:</p><p>  服務(wù)器端TCPserver.cpp:</p><p>  #include<winsock2.h></p><p>  #include<iostream></p><p>  using namespace std;</p><p&g

15、t;  #include <string.h></p><p>  void main() </p><p><b>  { </b></p><p>  //加載套接字(winsock)庫</p><p>  WORD wVersionRequested; </p><p>  WS

16、ADATA wsaData; </p><p><b>  int err; </b></p><p>  wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2</p><p>  err = WSAStartup( wVersionRequested, &wsaData ); </p&g

17、t;<p>  if ( err != 0 ) { </p><p><b>  return; </b></p><p><b>  } </b></p><p>  if ( LOBYTE( wsaData.wVersion ) != 2 || </p><p>  HIBYTE(

18、 wsaData.wVersion ) != 2 ) { </p><p>  WSACleanup( ); </p><p><b>  return; </b></p><p><b>  } </b></p><p><b>  //創(chuàng)建套接字 </b></p>

19、;<p>  SOCKET sockServer=socket(AF_INET,SOCK_STREAM,0); //SOCK_STREAM參數(shù)設(shè)置為TCP連接 </p><p>  SOCKADDR_IN addrServer; //設(shè)置服務(wù)器端套接字的相關(guān)屬性 </p><p>  addrServer.sin_addr.S_un.S_addr=htonl(INADDR_A

20、NY); //設(shè)置IP </p><p>  addrServer.sin_family=AF_INET; </p><p>  addrServer.sin_port=htons(5000); //設(shè)置端口號(hào) </p><p>  //將套接字綁定到本地地址和指定端口上 </p><p>  bind(sockServer,(SOCKADD

21、R*)&addrServer,sizeof(SOCKADDR)); </p><p>  //將套接字設(shè)置為監(jiān)聽模式,并將最大請(qǐng)求連接數(shù)設(shè)置成5,超過此數(shù)的請(qǐng)求全部作廢 </p><p>  listen(sockServer,5); </p><p>  SOCKADDR_IN addrClient; //用來接收客戶端的設(shè)置,包括IP和端口 </p

22、><p>  int len=sizeof(SOCKADDR); </p><p>  while(1) //不斷監(jiān)聽 </p><p><b>  { </b></p><p>  //得到創(chuàng)建連接后的一個(gè)新的套接字,用來和客戶端進(jìn)行溝通,原套接字繼續(xù)監(jiān)聽客戶的連接請(qǐng)求 </p><p>  SOC

23、KET sockConn=accept(sockServer,(SOCKADDR*)&addrClient, &len); </p><p>  if(sockConn!=INVALID_SOCKET) //創(chuàng)建成功 </p><p><b>  { </b></p><p>  char sendInfo[100]; <

24、/p><p>  //inet_ntoa將結(jié)構(gòu)轉(zhuǎn)換為十進(jìn)制的IP地址字符串 </p><p>  sprintf(sendInfo,"welcome %s to this test!",inet_ntoa(addrClient.sin_addr)); </p><p>  //成功建立連接后向客戶端發(fā)送數(shù)據(jù),結(jié)果將顯示在客戶端上 </p>

25、<p>  send(sockConn,sendInfo,strlen(sendInfo)+1,0); </p><p>  //從客戶端接收數(shù)據(jù),結(jié)果顯示在服務(wù)器上 </p><p>  char recvInfo[100]; </p><p>  recv(sockConn,recvInfo,100,0); </p><p>

26、;  printf("%s\n",recvInfo); </p><p>  //將本次建立連接中得到套接字關(guān)閉 </p><p>  closesocket(sockConn); </p><p><b>  } </b></p><p><b>  else </b><

27、/p><p><b>  { </b></p><p>  int errCode=WSAGetLastError(); </p><p>  printf("the errcode is:%d\n",errCode); </p><p><b>  } </b></p>

28、<p><b>  } </b></p><p>  //如果本程序不是死循環(huán),那么在此處還應(yīng)添加以下代碼: </p><p>  closesocket(sockServer); //對(duì)一直處于監(jiān)聽狀態(tài)的套接字進(jìn)行關(guān)閉 </p><p>  WSACleanup(); //終止對(duì)winsocket庫的使用 </p>

29、<p><b>  }</b></p><p>  客戶端TCPclient.cpp:</p><p>  #include<winsock2.h></p><p>  #include<iostream></p><p>  using namespace std;</p>

30、;<p>  #include <string.h></p><p>  void main() </p><p><b>  { </b></p><p><b>  //加載套接字庫 </b></p><p>  WORD wVersionRequested; <

31、/p><p>  WSADATA wsaData; </p><p><b>  int err; </b></p><p>  wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p>  err = WSAStartup( wVersionRequested, &a

32、mp;wsaData ); </p><p>  if ( err != 0 ) { </p><p><b>  return; </b></p><p><b>  } </b></p><p>  if ( LOBYTE( wsaData.wVersion ) != 2 || </p&g

33、t;<p>  HIBYTE( wsaData.wVersion ) != 2 ) { </p><p>  WSACleanup( ); </p><p><b>  return; </b></p><p><b>  } </b></p><p>  SOCKET sockCli

34、ent=socket(AF_INET,SOCK_STREAM,0); //SOCK_STREAM參數(shù)設(shè)置為TCP連接 </p><p>  SOCKADDR_IN addrServer; //服務(wù)器地址結(jié)構(gòu) </p><p>  addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //服務(wù)器地址 </p&

35、gt;<p>  addrServer.sin_port=htons(5000); //服務(wù)器端口號(hào) </p><p>  addrServer.sin_family=AF_INET; </p><p>  //與服務(wù)器端建立連接,進(jìn)行通信 </p><p>  int connReult=connect(sockClient,(SOCKADDR*)&

36、amp;addrServer,sizeof(SOCKADDR)); </p><p>  if(connReult!=WSAEADDRNOTAVAIL) //訪問成功 </p><p><b>  { </b></p><p>  //成功建立連接后向服務(wù)器端發(fā)送數(shù)據(jù),結(jié)果將顯示在服務(wù)器端上 </p><p>  sen

37、d(sockClient,"this is lisi!",strlen("this is zhangsan!")+1,0); </p><p>  //接收來自服務(wù)器端發(fā)送來的信息 </p><p>  char recvInfo[100]; </p><p>  recv(sockClient,recvInfo,100,0)

38、; </p><p>  printf("%s\n",recvInfo); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  in

39、t errCode=WSAGetLastError(); </p><p>  printf("the errcode is:%d\n",errCode); </p><p><b>  } </b></p><p>  closesocket(sockClient); </p><p>  WSAC

40、leanup(); </p><p><b>  }</b></p><p>  (二)基于UDP的服務(wù)器/客戶機(jī)程序:</p><p>  服務(wù)端UDPserver.cpp:</p><p>  #include <winsock2.h></p><p>  #include <

41、;iostream></p><p>  using namespace std;</p><p>  void main() </p><p><b>  { </b></p><p>  //加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 </p><

42、p>  WORD wVersionRequested; </p><p>  WSADATA wsaData; </p><p><b>  int err; </b></p><p>  wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p>  err

43、= WSAStartup( wVersionRequested, &wsaData ); </p><p>  if ( err != 0 ) { </p><p><b>  return; </b></p><p><b>  } </b></p><p>  if ( LOBYTE(

44、wsaData.wVersion ) != 2 || </p><p>  HIBYTE( wsaData.wVersion ) != 2 ) { </p><p>  WSACleanup( ); </p><p><b>  return; </b></p><p><b>  } </b>&l

45、t;/p><p><b>  //創(chuàng)建套接字 </b></p><p>  //注意第二個(gè)參數(shù)和TCP設(shè)置不同 </p><p>  SOCKET sockServer=socket(AF_INET,SOCK_DGRAM,0); </p><p>  SOCKADDR_IN addrServer; //設(shè)置服務(wù)器端套接字的地

46、址結(jié)構(gòu)的相關(guān)屬性 </p><p>  addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //設(shè)置IP </p><p>  addrServer.sin_family=AF_INET; </p><p>  addrServer.sin_port=htons(6000); //設(shè)置端口號(hào) </p>

47、<p>  //將套接字和服務(wù)器地址結(jié)構(gòu)綁定 </p><p>  bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); </p><p>  SOCKADDR_IN addrClient; </p><p>  int len=sizeof(SOCKADDR); </p>

48、<p>  char recvBuf[100]; </p><p>  char tempBuf[100]; </p><p>  char sendBuf[100]; </p><p><b>  while(1) </b></p><p><b>  { </b></p>

49、<p>  //從客戶端接收數(shù)據(jù) </p><p>  int result=recvfrom(sockServer,recvBuf,100,0,(SOCKADDR *)&addrClient,&len); </p><p>  if(result==SOCKET_ERROR) </p><p><b>  { </b&

50、gt;</p><p>  int errCode=WSAGetLastError(); </p><p>  printf("error:%d",errCode); </p><p>  break; //退出循環(huán) </p><p><b>  } </b></p><p>

51、<b>  else </b></p><p><b>  { </b></p><p>  if(recvBuf[0]=='q') //對(duì)方請(qǐng)求退出 </p><p><b>  { </b></p><p>  //同樣將退出請(qǐng)求發(fā)送回去 </p>

52、;<p>  sendto(sockServer,"q",strlen("q")+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR)); </p><p>  printf("the chat end!"); </p><p><b>  break; <

53、/b></p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  //將對(duì)方發(fā)送過來的信息前段加上IP地址進(jìn)行輸出 </p><p>  sprintf(

54、tempBuf,"%s said:%s",inet_ntoa(addrClient.sin_addr),recvBuf); </p><p>  printf("%s\n",tempBuf); </p><p>  //將用戶的鍵盤輸入發(fā)送到對(duì)方 </p><p>  printf("pleas input the

55、message:\n"); </p><p>  gets(sendBuf); //得到鍵盤輸入內(nèi)容 </p><p>  sendto(sockServer,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR)); </p><p><b>  } &l

56、t;/b></p><p><b>  } </b></p><p><b>  } </b></p><p>  closesocket(sockServer); </p><p>  WSACleanup(); </p><p><b>  }</b

57、></p><p>  客戶端UDPclient.cpp:</p><p>  #include <winsock2.h></p><p>  #include <iostream></p><p>  using namespace std;</p><p>  void main()

58、</p><p><b>  { </b></p><p>  //加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 </p><p>  WORD wVersionRequested; </p><p>  WSADATA wsaData; </p><p>

59、;<b>  int err; </b></p><p>  wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p>  err = WSAStartup( wVersionRequested, &wsaData ); </p><p>  if ( err != 0 ) { &

60、lt;/p><p><b>  return; </b></p><p><b>  } </b></p><p>  if ( LOBYTE( wsaData.wVersion ) != 2 || </p><p>  HIBYTE( wsaData.wVersion ) != 2 ) { </

61、p><p>  WSACleanup( ); </p><p><b>  return; </b></p><p><b>  } </b></p><p><b>  //創(chuàng)建套接字 </b></p><p>  SOCKET sockClient=so

62、cket(AF_INET,SOCK_DGRAM,0); //注意第二個(gè)參數(shù)和TCP設(shè)置不同 </p><p>  SOCKADDR_IN addrServer; //服務(wù)器地址結(jié)構(gòu) </p><p>  addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //服務(wù)器地址 </p><p>

63、;  addrServer.sin_family=AF_INET; </p><p>  addrServer.sin_port=htons(6000); //服務(wù)器端口號(hào) </p><p>  char tempBuf[100]; </p><p>  char recvBuf[100]; </p><p>  char sendBuf[1

64、00]; </p><p>  int len=sizeof(SOCKADDR); </p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  printf("plese input the message:\n");

65、</p><p>  gets(sendBuf); //得到用戶的鍵盤輸入 </p><p>  sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); </p><p>  int result=recvfrom(sockClient,r

66、ecvBuf,100,0,(SOCKADDR *)&addrServer,&len); </p><p>  if(result==SOCKET_ERROR) </p><p><b>  { </b></p><p>  int errCode=WSAGetLastError(); </p><p> 

67、 printf("error:%d",errCode); </p><p>  break; //退出循環(huán) </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p>

68、;<p>  if(recvBuf[0]=='q') //對(duì)方請(qǐng)求退出 </p><p><b>  { </b></p><p>  //同樣將退出請(qǐng)求發(fā)送回去 </p><p>  sendto(sockClient,"q",strlen("q")+1,0,(SOCKAD

69、DR*)& addrServer,sizeof(SOCKADDR)); </p><p>  printf("the chat end!"); </p><p><b>  break; </b></p><p><b>  } </b></p><p><b>

70、;  else </b></p><p><b>  { </b></p><p>  //將對(duì)方發(fā)送過來的信息前段加上IP地址進(jìn)行輸出 </p><p>  sprintf(tempBuf,"%s said:%s",inet_ntoa(addrServer.sin_addr),recvBuf); </p&

71、gt;<p>  printf("%s\n",tempBuf); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  closesocket(soc

72、kClient); </p><p>  WSACleanup(); </p><p><b>  }</b></p><p><b>  六.運(yùn)行結(jié)果:</b></p><p>  (一)基于TCP C/S應(yīng)用程序:</p><p>  程序運(yùn)行結(jié)果如下圖所示,在啟動(dòng)服務(wù)端

73、后啟動(dòng)客戶端時(shí),客戶端自動(dòng)按照運(yùn)行步驟發(fā)送消息到服務(wù)端上,服務(wù)端在偵聽過程中探測到客戶端的連接并返回歡迎消息。</p><p><b>  服務(wù)端:</b></p><p><b>  客戶端:</b></p><p>  (二)基于UDP C/S應(yīng)用程序:</p><p>  程序運(yùn)行結(jié)果如下圖,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論