




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Winsock网络编程网络应用程序是由通信进程对组成的,每对互相通信的应用程序进程互相发送报文,它们之间的通信必须通过下层的网络来进行。为了将应用程序和底层的网络通信协议屏蔽开来,采用抽象概念-套接字(Socket)来作为应用程序和底层网络之间的应用程序编程接口(API)。为了惟一地标识通信对等方的通信进程,套接字必须包含两种信息:(1)通信对等方的网络地址;(2)通信对等方的进程编号,通常称为端口号。Windows Sockets是在Windows环境下使用的一套网络编程规范,简称为Winsock,它来源于“Berkeley Socket”。Sockets本来是Unix操作系统下流行的一种网络编程接口(API),它是1983年在Berkeley(加州大学伯克利分校)4.2 BSD操作系统中被首先引入的,因此被称为“Berkeley Socket API”。Winsock API函数的分三类:(1)与BSD Socket(用在Unix中)相兼容的基本函数;(2)网络数据信息检索函数;(3)Windows专用扩展函数三类。Winsock规范的核心内容是符合Berkeley Socket风格的库函数。Windows的扩展部分为应用程序开发者提供了开发Windows应用软件的功能,它有利于程序员写出更加稳定并且更加高效的程序。另外,除了WSAStartup( )和WSACleanup( )两个函数外,其他Windows扩展函数的使用不是强制性的。Winsock是通过动态链接库的方式提供给软件开发者的,而且从Windows 95以后已经被集成到了Windows操作系统之中。Winsock同时包括了16位和32位的编程接口,16位的Windows Socket 2应用程序使用的动链接库是WINSOCK.DLL,而32位的使用WSOCK32.DLL(Winsock1.1版)和WS2_32.DLL(Winsock2.0版)。在编程时,使用Winsock API时要包含头文件winsock.h(Winsock1.1版)或winsock2.h(Winsock2.0版)。这里Winsock1.1和Winsock2.0是Winsock的两个主要版本,Winsock2.0是Winsock1.1的扩展,它向下完全兼容。有关Winsock的内容及其库函数请参见相关的资料。TCP/IP的传输层可以使用传输控制协议(TCP)来封装数据,也可以使用用户数据报协议(UDP)来封装数据。TCP 协议面向连接,使用字节流传送服务,是可靠的;而UDP 协议面向非连接,使用数据报服务,是非可靠的。TCP 协议提供高可靠性的传输,UDP 协议提供高效的传输。在实际应用中,它们有其各自所适应的场合。在面向连接的 Client/Server 结构中:服务器首先启动,通过调用socket( )建立一个套接口,然后调用bind()将该套接口和本地网络地址联系在一起,再调用listen( )使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用accept( )来接收连接。客户在建立套接口后就可调用connect( )和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用read( )和write( )来发送和接收数据。最后,待数据传送结束后,双方调用close( )关闭套接口。在无连接的 Client/Server 结构中,服务器使用socket( )和bind( )函数调用建立和连接socket。由于此时的socket 是无连接的,服务器使用recvfrom( )函数从socket 接收数据。客户端也只调用bind( )函数而不调用connect( )函数。注意:无连接的协议不在两个端口之间建立点到点的连接,因此sendto( )函数要求程序在一个参数中指明目的地址。recvfrom( )函数不需要建立连接,它对到达相连协议端口的任何数据作出响应。当recvfrom( )函数从socket 收到一个数据报时,它将保存发送此数据包的进程的网络地址以及数据包本身。程序(服务器和客户)用保存的地址去确定发送(客户)进程。在必要的条件下,服务器将其应答数据报送到从recvfrom( )函数调用中所得到的网络地址中去。基于TCP和UDP的服务器端程序和客户端程序工作的流程分别见下图。请查阅相关资料,并回答下列任务。(1)给出程序详细的流程图和对程序关键函数的详细说明。(2)使用 Winsock API 开发通信程序中的客户端程序和服务器程序时,各需要哪些不同的函数。(3)解释 connect()、bind()等函数中struct sockaddr *addr 参数各个部分的含义,并用具体的数据举例说明。(4)说明面向连接的客户端和非连接的客户端在建立 socket 时有什么区别。(5)比较面向连接的通信和无连接通信,它们各有什么优点和缺点?适合在哪种场合下使用?实验二 基于TCP协议的客户服务器程序一实验目的1. 理解并掌握bind()函数的作用和使用方法;2. 理解并掌握listen()函数的作用和使用方法;3. 理解并掌握accept()函数的作用和使用方法;4. 理解并掌握connect()函数的作用和使用方法;5. 理解并掌握send()函数的作用和使用方法;6. 理解并掌握recv()函数的作用和使用方法。二实验环境与设备局域网、Windows操作系统和Visual C+6.0集成开发工具三实验内容编写基于TCP协议(有连接)的客户/服务器通信程序,具体要求如下:(1) 服务器的IP地址由系统指定,端口号使用5555,功能是把客户端的IP地址和端口号显示出来,并给客户端发送hello! I am a sever.”如果发送正确则显示所发送的字节数。(2) 客户机向服务器提出连接请求,当连接建立后,从服务器的端口5555接收数据并进行显示,然后断开与服务器的连接。(3)增加功能使客户和服务器之间传送任意字符信息。客户端:#include #include#include#define DEFAULT_PORT 5555 /服务器默认端口号#define DATA_BUFFER 1024#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main(int argc,char *argv)WSADATA wsaData;/SOCKET sClient;int iPort=DEFAULT_PORT;int iLen,iSend;/从服务器接收的数据长度char bufDATA_BUFFER,tempStr=nHello! I am Client.n;memset(buf,0,sizeof(buf);memcpy(buf,tempStr,sizeof(tempStr);/接收数据的缓冲区struct sockaddr_in ser;/服务器端地址 if(argc2) /提示在命令行中输入服务器IP地址 printf(nUsage:client server IP addressn);return; /检查系统协议栈的安装情况if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)/或WSAStartup(0x0202,&wsaData),Winsock2.2版printf(nFailed to load Winsock.n);return; /填写要连接的服务器地址信息ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=inet_addr(argv1);/将点分十进制的IP地址转化为网络字节顺序的IP地址/建立客户端流式套接口sClient=socket(AF_INET,SOCK_STREAM,0); if(sClient=INVALID_SOCKET)printf(nsocket() Failed:%dn,WSAGetLastError();return;/请求与服务器端建立TCP连接if(connect(sClient,(struct sockaddr *)&ser,sizeof(ser)=INVALID_SOCKET)printf(nconnect() Failed:%dn,WSAGetLastError();return;else iSend=send(sClient,buf,sizeof(tempStr),0);/从服务器端接收数据iLen=recv(sClient,buf,sizeof(buf),0);if(iLen=0)/连接结束时返回0return;else if(iLen=SOCKET_ERROR) printf(nrecv() Failed:%dn,WSAGetLastError(); return;printf(nrecv() data from server:%sn,buf);closesocket(sClient);WSACleanup();/main()服务器:#include #include#include#define DATA_BUFFER 1024#define DEFAULT_PORT 5555 /服务器默认端口号#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sListen,sAccept;int iLen;int iSend;char bufDATA_BUFFER;struct sockaddr_in ser,cli; memset(buf,0,sizeof(buf);printf(EchoTcpServer are waiting.n); /检查系统协议栈的安装情况WSAStartup(MAKEWORD(2,2),&wsaData); /创建服务器端的套接口sListen=socket(AF_INET,SOCK_STREAM,0); ser.sin_family=AF_INET;ser.sin_port=htons(iPort); ser.sin_addr.s_addr=htonl(INADDR_ANY);bind(sListen,(LPSOCKADDR)&ser,sizeof(ser); /进入监听状态listen(sListen,5);iLen=sizeof(cli);/客户地址长度while(1) sAccept=accept(sListen,(struct sockaddr *)&cli,&iLen); printf(nAccepted client IP:%s, port:%dn,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);/从客户端接收数据iLen=recv(sAccept,buf,sizeof(buf),0);if(iLen=0)/连接结束printf(n连接结束,等待下一个连接。n);continue;else if(iLen=SOCKET_ERROR) printf(nrecv() Failed:%dn,WSAGetLastError(); continue;printf(nrecv() data from client%s:%sn,inet_ntoa(cli.sin_addr),buf); iSend=send(sAccept,buf,iLen,0);if(iSend=0)/连接结束 printf(n发送时连接结束,等待下一个连接。n); continue;else printf(nsend() byte:%dnn,iSend);closesocket(sAccept);/while(1)closesocket(sListen);WSACleanup();/main()实验三 基于UDP协议的客户/服务器程序一实验目的1. 理解并掌握sendto()函数的作用和使用方法;2. 理解并掌握recvfrom()函数的作用和使用方法;3. 理解并掌握closesocket()函数的作用和使用方法;4. 理解并掌握发送缓冲区和接收缓冲区的作用和使用方法;5. 理解并掌握面向连接的TCP和无连接的UDP编程方法的区别。二实验环境与工具局域网、Windows操作系统和Visual C+6.0集成开发工具三实验内容 编写基于UDP协议(无连接)的客户/服务器通信程序,具体要求如下:(1)服务器的IP地址由系统指定,端口号使用5555,功能是把客户端发过来的信息显示出来,并给客户端发送hello! I am a sever.”。(2)先由客户机向服务器发送信息“Hello!I am a client.”;其次再将从服务器接收的信息显示出来。(3)增加功能使客户和服务器之间传送任意字符信息。服务器一:#include #include#include#define DEFAULT_PORT 3456 /服务器默认端口号#define BUFFER_LENGTH 1024/缓冲区长度#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sSocket;int iLen;/客户地址长度int iSend;/发送的数据长度int iRecv;/接收的数据长度char send_buf=Hello! I am a server.;/要发送给客户的信息char recv_bufBUFFER_LENGTH;/接收数据的缓冲区struct sockaddr_in ser,cli;/本地地址ser和客户地址cliprintf(nnUdpServer are waiting.n); /检查系统协议栈的安装情况if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(nFailed to load Winsock.n);return; /创建服务器端的套接口sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(nsocket() Failed:%dn,WSAGetLastError();return; /以下建立服务器端地址ser.sin_family=AF_INET;ser.sin_port=htons(iPort);/把一个双字节的主机字节顺序的数转换为网络字节顺序的数ser.sin_addr.s_addr=htonl(INADDR_ANY);/使用系统指的IP地址,并转换为网络字节序的数if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf(nbind() failed:%dn,WSAGetLastError();return;iLen=sizeof(cli);/客户地址长度/初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf);while(1)/进入一个无限循环,等待客户的数据 iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(struct sockaddr *)&cli,&iLen);/接收来自客户端的数据if(iRecv=SOCKET_ERROR)printf(nrecvfrom() failed:%dn,WSAGetLastError(); break; else if(iRecv=0)break;else /输出接收到的数据printf(nrecvfrom():%sn,recv_buf);/输出客户IP地址和端口号printf(nAccepted UdpClient IP:%s, port:%dn,inet_ntoa(cli.sin_addr),/inet_ntoa()将网络字节顺序的IP地址转换为点分十进制的IP地址形式ntohs(cli.sin_port);/给客户发送信息iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(struct sockaddr *)&cli,sizeof(cli);if(iSend=SOCKET_ERROR)printf(nsendto() failed:%dn,WSAGetLastError(); break;else if(iSend=0)break; else printf(nsendto() succeeded!byte(s):%dnn,iSend); /End of while(1)closesocket(sSocket);WSACleanup();/main()客户一:#include #include#include#define DEFAULT_PORT 3456 /服务器默认端口号#define BUFFER_LENGTH 1024#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main(int argc,char *argv)int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sClient;int iLen;/客户地址长度int iSend;/发送的数据长度int iRecv;/接收的数据长度char send_buf=Hello! I am a client.;/要发送给服务器的信息char recv_bufBUFFER_LENGTH;/接收数据的缓冲区struct sockaddr_in ser;/服务器的地址,即目的地址 /处理命令行中输入的参数if(argc2)/提示在命令行中输入服务器的IP地址printf(nUsage: UdpClient server IP addressn);return;/初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf);/检查系统协议栈的安装情况if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(nFailed to load Winsock.n);return; /以下建立服务器端地址ser.sin_family=AF_INET;ser.sin_port=htons(iPort);/把一个双字节的主机字节顺序的数转换为网络字节顺序的数ser.sin_addr.s_addr=inet_addr(argv1);/使用系统指的IP地址,inet_addr()函数将点分十进制的IP地址转换为网络字节序的数 /创建服务器端的套接口sClient=socket(AF_INET,SOCK_DGRAM,0);if(sClient=INVALID_SOCKET)printf(nsocket() Failed:%dn,WSAGetLastError();return; iLen=sizeof(ser);/服务器地址长度/给服务器发送数据iSend=sendto(sClient,send_buf,sizeof(send_buf),0,(struct sockaddr *)&ser,iLen);if(iSend=SOCKET_ERROR)printf(nsendto() failed(to server):%dn,WSAGetLastError(); return;else if(iSend=0)/连接结束返回0return;else printf(nsendto() succeeded!byte(s):%dnn,iSend); /从服务器接收数据 iRecv=recvfrom(sClient,recv_buf,BUFFER_LENGTH,0,(struct sockaddr *)&ser,&iLen);if(iRecv=SOCKET_ERROR)printf(nrecvfrom() failed:%dn,WSAGetLastError(); return; else if(iRecv=0) return; else /输出接收到的数据printf(nrecvfrom():%sn,recv_buf);return; closesocket(sClient);WSACleanup();/main()服务器二:#include #include#include#define DEFAULT_PORT 5050 /服务器默认端口号#define BUFFER_LENGTH 1024/缓冲区长度#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sSocket;int iLen;/客户地址长度int iSend;/发送的数据长度int iRecv;/接收的数据长度char send_bufBUFFER_LENGTH;/要发送给客户的信息char recv_bufBUFFER_LENGTH;/接收数据的缓冲区struct sockaddr_in ser,cli;/本地地址ser和客户地址cliprintf(nnIm waiting.n); /检查系统协议栈的安装情况if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(nFailed to load Winsock.n);return; /创建服务器端的套接口sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(nsocket() Failed:%dn,WSAGetLastError();return; /给本服务器端地址结构体变量赋值ser.sin_family=AF_INET;ser.sin_port=htons(iPort);/把一个双字节的主机字节顺序的数转换为网络字节顺序的数ser.sin_addr.s_addr=htonl(INADDR_ANY);/使用系统指的IP地址,并转换为网络字节序的数if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf(nbind() failed:%dn,WSAGetLastError();return;iLen=sizeof(cli);/客户地址长度/初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf);while(1)/进入一个无限循环,等待客户的数据 iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(struct sockaddr *)&cli,&iLen);/接收来自客户端的数据if(iRecv=SOCKET_ERROR)printf(nrecvfrom() failed:%dn,WSAGetLastError(); break; else if(iRecv=0)break; /退出while(1)循环else /将接收到的数据输出printf(nrecvfrom():%sn,recv_buf);/将客户IP地址和端口号输出printf(nAccepted UdpClient IP:%s, port:%dn,inet_ntoa(cli.sin_addr),/inet_ntoa()将网络字节顺序的IP地址转换为点分十进制的IP地址形式ntohs(cli.sin_port);/给客户发送信息gets(send_buf);iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(struct sockaddr *)&cli,sizeof(cli);if(iSend=SOCKET_ERROR)printf(nsendto() failed:%dn,WSAGetLastError(); break;else if(iSend=0)break;/End of while(1)closesocket(sSocket);WSACleanup();/main()客户二:#include #include#include#define DEFAULT_PORT 5050 /服务器默认端口号#define BUFFER_LENGTH 1024/缓冲区长度#pragma comment (lib,Ws2_32.lib)/加入库,供编译连接之用void main(int argc,char *argv)int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET mySocket;int iLen;/客户地址长度int iSend;/发送的数据长度int iRecv;/接收的数据长度char send_bufBUFFER_LENGTH;/要发送给客户的信息char recv_bufBUFFER_LENGTH;/接收数据的缓冲区struct sockaddr_in ser;/本地地址ser和客户地址cliif(argc2)printf(Usage:UdpTalkCli 目标IP地址n);return; /检查系统协议栈的安装情况if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(nFailed to load Winsock.n);return; printf(nnI want to send.n); /创建服务器端的套接口mySocket=socket(AF_INET,SOCK_DGRAM,0);if(mySocket=INVALID_SOCKET)printf(nsocket() Failed:%dn,WSAGetLastError();return; /以下建立服务器端地址ser.sin_family=AF_INET;ser.sin_port=htons(iPort);/把一个双字节的主机字节顺序的数转换为网络字节顺序的数ser.sin_addr.s_addr=inet_addr(argv1);/使用系统指的IP地址,并转换为网络字节序的数iLen=sizeof(ser);/服务器地址长度/初始化接收缓冲区memset(recv_buf,0,sizeof(recv_buf);while(1)/进入一个无限循环,等待客户的数据 /给服务器发送信息gets(send_buf);iSend=sendto(mySocket,send_buf,sizeof(send_buf),0,(struct sockaddr *)&ser,sizeof(ser);if(iSend=SOCKET_ERROR)printf(nsendto() failed:%dn,WSAGetLastError(); break;else if(iSend=0)break; iRecv=recvfrom(mySocket,recv_buf,BUFFER_LENGTH,0,(struct sockaddr *)&ser,&iLen);/接收来自客户端的数据if(iRecv=SOCKET_ERROR)printf(nrecvfrom() failed:%dn,WSAGetLastError(); break; else if(iRecv=0)break;else /输出接收到的数据printf(nrecvfrom():%sn,recv_buf);/输出客户IP地址和端口号printf(nAccepted UdpClient IP:%s, port:%dn,inet_ntoa(ser.sin_addr),/inet_ntoa()将网络字节顺序的IP地址转换为点分十进制的IP地址形式ntohs(ser.sin_port); /End of while(1)closesocket(mySocket);WSACleanup();/main()实验五 广播和多播通信程序一实验目的1. 理解广播通信的概念和它与一对一的点对点通信方式的区别;2. 掌握广播通信程序的套接口类型;3. 掌握套接口属性设置setsockopt()和获取getsockopt()的函数的作用和使用方法;4. 理解并掌握广播通信方式的广播发送端的编程方法;5. 理解并掌握广播通信方式的广播接收端的编程方法;6. 了解组播通信方式的概念和其程序设计方法。二实验环境与工具局域网、Windows操作系统和Visual C+6.0集成开发工具三实验内容1. 设计一个简单的基于对话框的广播通信程序,该程序可以把编辑框中输入的内容广播发送出去。在接收端,编写广播接收程序对话框,当用户按下“接收信息”按钮后,所接收的广播信息既可显示出来。2. 广播服务中的数据包被发送到网络中的每个节点,而多播服务中的数据包则被发送到网络中的一组节点。组播需要确定一个组播地址,它代表一个组。组播地址为D类IP地址,其范围是224.0.0.0至239.255.255.255,但其中有许多地址保留为特殊目的使用。试编写一个简单的使用IP多播的程序,包括加入和离开多播组,以及接接多播数据和发送多播数据。组播地址设为234.5.6.7。广播发送程序:#include#include#include #pragma comment(lib,ws2_32.lib)void main() SOCKET sendSocket;SOCKADDR_IN recv;BOOL bBroadcast;char sendData1024;WSADATA wsd;if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf(WSAStartup failed!);return;sendSocket=socket(AF_INET,SOCK_DGRAM,0);if(sendSocket=INVALID_SOCKET)printf(socket() failed:%d,WSAGetLastError();return;bBroadcast=TRUE;setsockopt(sendSocket,SOL_SOCKET,SO_BROADCAST,(char *)&bBroadcast,sizeof(TRUE);recv.sin_family=AF_INET;recv.sin_port=htons(1031);recv.sin_addr.s_addr=INADDR_BROADCAST;printf(nPlease input the message to be sent:);scanf(%s,sendData);int ret=sendto(sendSocket,sendData,1024,0,(SOCKADDR *)&recv,sizeof(recv);if(ret=SOCKET_ERROR)printf(sendto() failed:%d,WSAGetLastError();return;elseclosesocket(sendSocket);广播接收程序:#include #include#include #pragma comment(lib,ws2_32.lib)void main()SOCKET recvSocket;SOCKADDR_IN local;SOCKADDR_IN sendAddr;BOOL bBroadcast;char *recvbuf=new char1024;int sendsize;int ret;/接收返回值WSADATA wsd;if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf(WSAStartup failed!);recvSocket=socket(AF_INET,SOCK_DGRAM,0);if(recvSocket=INVALID_SOCKET)printf(socket() failed:%d,WSAGetLastError();bBroadcast=TRUE;setsockopt(recvSocket,SOL_SOCKET,SO_BROADCAST,(char *)&bBroadcast,sizeof(TRUE);local.sin_family=AF_INET;local.sin_port=htons(5050);local.sin_addr.s_addr=htonl(INADDR_ANY);/inet_addr(192.168.1.102);if(bind(recvSocket,(SOCKADDR *)&local,sizeof(local)=SOCKET_ERROR)printf(bind() failed:%d,WSAGetLastError();sendsize=sizeof(sendAddr);while(1)memset(recvbuf,0,sizeof(recvbuf);ret=recvfrom(recvSocket,recvbuf,1024,0,(SOCKADDR *)&sendAddr,&sendsize);if(ret=SOCKET_ERROR)printf(recvfrom() failed:%d,WSAGetLastError();return; printf(n%sn,recvbuf);closesocket(recvSocket);WSACleanup();return; 实验八 非阻塞的套接字工作模式程序一实验目的1. 理解套接字的阻塞工作模式和非阻塞工作模式的区别;2. 了解非阻塞工作模式下的五种“套接字I/O模型”的各自特点;3.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度农村涵洞改造施工合同
- 2025版导游领队带团全程服务合同范本
- 2025版建筑消防技术咨询服务与改造协议
- 二零二五年度脚手架施工工程结算与支付合同
- 2025版汽车融资租赁车辆租赁合同模板修订版
- 二零二五年度货物运输保险协议:物流企业货物保险合同
- 二零二五年场部保密协议及保密信息保密义务履行监督合同
- 2025版江苏智能交通系统工程合同
- 2025版汽车租赁公司车辆股份买卖合作协议
- 2025版婚礼化妆服务及产品销售合同
- 工程项目施工场地移交协议书
- 中国加速康复外科临床实践指南2021
- 2025年公共基础知识多选题库及答案(共100题)
- 2025年医院食堂肉类供应合同书
- 《新能源材料及器件组装》课程教学大纲
- 孕产期保健知识
- 2025年设计顾问技术服务合同模板
- 实验试剂耗材供应服务方案
- 初三下学期英语项目式学习方案
- 2025年度美团外卖配送员招聘合同范本
- 2025年度物流运输应急演练计划
评论
0/150
提交评论