system("PAUSE");
}
程序分析:
main()函数中定义了两个整型变量n1,n2两个双精度类型变量d1,d2然后调用min(n1,n2);即实例化函数模板Tmin(Tx,Ty)其中T为int型,求出n1,n2中的最小值.同理调用min(d1,d2)时,求出d1,d2中的最小值.
类模板的一般形式如下:
Templateclass类名{
//类定义......
};
说明:
其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。
程序范例:
//ClassTemplate.h
#ifndefClassTemplate_HH
#defineClassTemplate_HH
template
classmyClass{
private:
T1I;
T2J;
public:
myClass(T1a,T2b);//Constructor
voidshow();
};
//这是构造函数
//注意这些格式
template
myClass:
:
myClass(T1a,T2b):
I(a),J(b){}
//这是voidshow();
template
voidmyClass:
:
show()
{
cout<<"I="<
}
#endif
//Test.cpp
#include
#include"ClassTemplate.h"
usingstd:
:
cout;
usingstd:
:
endl;
voidmain()
{
myClassclass1(3,5);
class1.show();
myClassclass2(3,'a');
class2.show();
myClassclass3(2.9,10);
class3.show();
system("PAUSE");
}
十一、tcp/ip协议基本知识
1、名词解释
IP:
网间协议(InternetProtocol)负责主机间数据的路由和网络上数据的存储。
同时为ICMP,TCP,UDP提供分组发送服务。
用户进程通常不需要涉及这一层。
ARP:
地址解析协议(AddressResolutionProtocol)此协议将网络地址映射到硬件地址。
RARP:
反向地址解析协议(ReverseAddressResolutionProtocol)此协议将硬件地址映射到网络地址
ICMP:
网间报文控制协议(InternetControlMessageProtocol)此协议处理信关和主机的差错和传送控制。
TCP:
传送控制协议(TransmissionControlProtocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。
它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。
(注:
大多数网络用户程序使用TCP)
UDP:
用户数据报协议(UserDatagramProtocol)这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。
FTP:
文件传输协议(FileTransferProtocol)允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。
SMTP:
简单邮件传送协议(SimpleMailTransferProtocol)SMTP协议为系统之间传送电子邮件。
TELNET:
终端协议(TelnetTerminalProcotol)允许用户以虚终端方式访问远程主机
HTTP:
超文本传输协议(HypertextTransferProcotol)
TFTP:
简单文件传输协议(TrivialFileTransferProtocol)
2、TCP/IP特点
TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。
因此用户一般不涉及。
编程时,编程界面有两种形式:
一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。
前者为核内实现,后者为核外实现。
用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。
2.1、套接字
套接字是网络的基本构件。
它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连听进程。
套接字存在通信区域(通信区域又称地址簇)中。
套接字只与同一区域中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。
WINDOWS中的套接字只支持一个域——网际域。
套接字具有类型。
WINDOWSSOCKET1.1版本支持两种套接字:
流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)
2.2、WINDOWSSOCKETS实现
一个WINDOWSSOCKETS实现是指实现了WINDOWSSOCKETS规范所描述的全部功能的一套软件。
一般通过DLL文件来实现
2.3、阻塞处理例程
阻塞处理例程(blockinghook,阻塞钩子)是WINDOWSSOCKETS实现为了支持阻塞套接字函数调用而提供的一种机制。
2.4、多址广播(multicast,多点传送或组播)
是一种一对多的传输方式,传输发起者通过一次传输就将信息传送到一组接收者,与单点传送(unicast)和广播(Broadcast)相对应。
3、客户机/服务器模式
在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Servermodel)。
该模式的建立基于以下两点:
1、非对等作用;2、通信完全是异步的。
客户机/服务器模式在操作过程中采取的是主动请示方式:
首先服务器方要先启动,并根据请示提供相应服务:
(过程如下)
1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。
2、等待客户请求到达该端口。
3、接收到重复服务请求,处理该请求并发送应答信号。
4、返回第二步,等待另一客户请求
5、关闭服务器。
客户端:
1、打开一通信通道,并连接到服务器所在主机的特定端口。
2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……
3、请求结束后关闭通信通道并终止。
基本套接字
为了更好说明套接字编程原理,给出几个基本的套接字,在以后的篇幅中会给出更详细的使用说明。
1、创建套接字——socket()
功能:
使用前创建一个新的套接字
格式:
SOCKETPASCALFARsocket(intaf,inttype,intprocotol);
参数:
af:
通信发生的区域
type:
要建立的套接字类型
procotol:
使用的特定协议
2、指定本地地址——bind()
功能:
将套接字地址与所创建的套接字号联系起来。
格式:
intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);
参数:
s:
是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
其它:
没有错误,bind()返回0,否则SOCKET_ERROR
地址结构说明:
structsockaddr_in
{
shortsin_family;//AF_INET
u_shortsin_port;//16位端口号,网络字节顺序
structin_addrsin_addr;//32位IP地址,网络字节顺序
charsin_zero[8];//保留
}
3、建立套接字连接——connect()和accept()
功能:
共同完成连接工作
格式:
intPASCALFARconnect(SOCKETs,conststructsockaddrFAR*name,intnamelen);
SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*name,intFAR*addrlen);
参数:
同上
4、监听连接——listen()
功能:
用于面向连接服务器,表明它愿意接收连接。
格式:
intPASCALFARlisten(SOCKETs,intbacklog);
5、数据传输——send()与recv()
功能:
数据的发送与接收
格式:
intPASCALFARsend(SOCKETs,constcharFAR*buf,intlen,intflags);
intPASCALFARrecv(SOCKETs,constcharFAR*buf,intlen,intflags);
参数:
buf:
指向存有传输数据的缓冲区的指针。
6、多路复用——select()
功能:
用来检测一个或多个套接字状态。
格式:
intPASCALFARselect(intnfds,fd_setFAR*readfds,fd_setFAR*writefds,
fd_setFAR*exceptfds,conststructtimevalFAR*timeout);
参数:
readfds:
指向要做读检测的指针
writefds:
指向要做写检测的指针
exceptfds:
指向要检测是否出错的指针
timeout:
最大等待时间
7、关闭套接字——closesocket()
功能:
关闭套接字s
格式:
BOOLPASCALFARclosesocket(SOCKETs);
面向连接的套件字的函数调用过程
服务器方:
1.socket()建立流式套接字,返回套接字号s
2.bind(),套接字与本地地址相连接
3.listen(),通知TCP服务器准备好接收连接
4.accept(),接收连接,等待客户端的连接
5.建立连接,accept()返回,得到新的套接字,如ns
6.recv()/send(),在套接字ns上读写数据,直到完成交换
7.closesocket(),关闭套接字ns
8.closesocket(),关闭最初套接字s,服务结束
客户端:
1.socket()建立流式套接字,返回套接字号s
2.connect(),将套接字s与远地主机连接
3.recv()/send(),在套接字上读写数据,直到完成数据交换
4.closesocket(),关闭套接字s,结束TCP对话
无连接协议的套接字的函数调用过程
服务器方:
1.socket()建立流式套接字,返回套接字号s
2.bind(),套接字与本地地址相连接
3.recv()/send(),在套接字ns上读写数据,直到完成交换
4.closesocket(),关闭最初套接字s,服务结束
客户端:
1.socket()建立流式套接字,返回套接字号s
2.bind(),套接字与本地地址相连接
3.recv()/send(),在套接字上读写数据,直到完成数据交换
4.closesocket(),关闭套接字s
十二、二叉树
1、二叉树:
是