精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● CGI>>初学乍用>>谈socket编程(3)

主题:谈socket编程(3)
发信人: 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]

[关闭][返回]