发信人: lunarsea()
整理人: workingnow(2002-10-30 13:58:37), 站内信件
|
第三帖 套接字SOCKET和perl的socket编程
在UNIX世界中,网络应用编程界面有两类:BSD的套接字SOCKET和SYSTEM V
的TLI.由于Sun公司采用了支持TCP/IP的BSD系统,TCP/IP的应用有了更大发展
其网络应用编程界面Socket在网络编程中已成为标准。并且也早已经进入了MS
的世界。
TCP/IP的Socket提供下列三种类型的套接字
1。流式套接字(SOCKET_STREAM)
提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送
且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,
无长度限制。FTP协议即采用流式套接字。
2。数据报式套接字(SOCKET_DGRAM)
提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,
数据可能丢失或重复,并且接收顺序无序。网络文件系统NFS使用数据报式套
接字。
3。原始式套接字(SOCKET_RAW)
该接口允许对较低层次协议,如IP、ICMP直接访问。常用于检验新的协议
实现或访问现有服务中配置的新设备。
基本套接字调用
创建套接字--socket();
绑定本机端口--bind();
建立连接--connect(),accept();
侦听端口--listen();
数据传输--send(),recv();
输入/输出多路复用--select();
关闭套接字--closesocket();
不论何种语言,和socket打交道都是这一组调用只是在格式上有一点点
差别。我只使用过c和perl,再加上这里又不让出现与perl无关的东西,那下
面就主要讨论PERL的socket编程啦:
创建建套接字:
socket(SOC_VARIABLE,DOMAIN_FLAG,connectType,num) #相应的C语言调用为so ckid=socket(af,type,protocol)
参数含义如下:
SOC_VARIABLE是用于建立套接的句柄,相当于c里面的sockid号;
DOMAIN_FLAG叫域标记,在C里相当于af--address family,地址族。
地址族和域是一个概念,其实就是平常所说的域。UNIX支持的域类型有
AF-UNIX; UNIX内部地址
AF-INET; TCP/IP地址
AF-NS; Xerox NS地址
AF-APPLETALK; Apple的Appletalk地址
而dos/windows支持的域地址族只有AF-INET.所以大部分的socket编程
都只用到它。
connectType(c里的type)就是前面所说的三种socket类型。
num相当于c里面的protocol那大家一看就明白了这是协议号,用来指定
SOCKET请求所希望的协议,这个参数不一定起作用,当前两个参数可以
确定协议时可以取值为零。
所以,一个完整的PERL的建立socket如下
socket(THESCK,AF-INET,SOCKET_STREAM,getprotocolbyname('tcp'));
#c语言: int sockid;
# sockid = socket(AF-INET,SOCKET_STREAM,0);
(实在太累了,剩下的下次再说吧。sorry :P)
-- wanna fall in love with me?
NO WAY!!!
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.100.29.107]
|
|