发信人: 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]
  | 
 
 
 |