DGRAM);
file://指定端口号产生一个数据报套接字
第一种方法在栈上产生一个CAsyncSocket对象,而第二种方法在堆上产生CAsyncSocket对象。第一种Create成员函数用缺省参数产生一个字节流套接字,第二种Create成员函数用指定的端口和地址产生一个数字报套接字。Create的参数有:
①端口,UINT类型。注意:如果是服务方,则使用一个众所周知的端口供服务方连接;如果是客户方,典型做法是接受默认参数,使套接字可以自主选择一个可用端口;
②socket类型。SOCK-STREAM(默认值)或SOCK-DGRAM;
③socket地址。例如“ftp.gliet.edu.cn”或“202.193.64.33”。
(2)如是客户方程序,用CAsyncSocket∷Connect成员函数连接到服务方;如是服务方
程序,用CAsyncSocket∷Listen成员函数开始监听,一旦收到连接请求,则调用CAsyncSocket∷Accept成员函数开始接收。注意:CAsyncSocket∷Accept成员函数要用一个新的并且是空的CSocket对象作为它的参数,这里所说的“空的”指的是这个新对象还没有调用Create成员函数。
(3)调用其他的CAsyncSocket类成员函数进行通讯管理。
(4)通讯结束后,销毁CAsyncSocket对象。如果是在栈上产生的CAsyncSocket对象,则对象超出定义的范围时自动被析构;如果是在堆上产生,也就是用了new这个操作符,则必须使用delete操作符销毁CAsyncSocket对象。
3.CSocket类编程模型
使用CSocket对象涉及CArchive和CSocketFile类对象。以下介绍的针对字节流型套接字的操作步骤中,只有第3步对于客户方和服务方操作是不同的,其他步骤都相同。
(1)构造一个CSocket对象。
(2)使用这个对象的Create成员函数产生一个socket句柄。在客户方程序中,除非需要数据报套接字,Create一般情况下应该使用默认参数。而对于服务方程序,必须在调用Create时指定一个端口。注意:CArchive不能与数据报(UDP)套接字一起工作,因此对于数据报套接字,CAsyncSocket和CSocket的使用方法是一样的。
(3)如果是客户方套接字,则调用CAsyncSocket∷Connect与服务方套接字连接;如果是服务方套接字,则调用CAsyncSocket∷Listen开始监听来自客户方的连接请求,收到连接请求后,调用CAsyncSocket∷Accept接受请求,建立连接。注意:Accept成员函数需要一个新的并且为空的CSocket对象作为它的参数,解释同上。
(4)产生一个CSocketFile对象,并把它与CSocket对象关联起来。
(5)为接收和发送数据各产生一个CArchive对象,把它们与CSocketFile对象关联起来。切记CArchive是不能和数据报套接字一起工作的。
(6)使用CArchive对象在客户与服务方传送数据。(7)通讯完毕后,销毁CArchive、CSocketFile和CSocket对象。