发信人: lunarsea() 
整理人: workingnow(2002-10-30 13:58:37), 站内信件
 | 
 
 
第四帖 基本套接字系统调用第二步--绑定
 
 上次说到哪里啦?哦,对。socket创建已经搞定,该第二步了:bind()--
 绑定到本地地址。
     第一步socket()调用只是指定了相关五元组的协议元。其他四元
 需要别的调用来补充。socket的创建可以认为创建了一个名字空间(地址
 族),但他没有被命名。bind()将套接字地址与本机创建的套接字句柄(
 c里面的套接字号)绑定,即将名字赋予套接字(句柄),以指定本地半相关。
 按照标准的socket来说(在UNIX世界里所谓编程的"标准接口"就和说"c的
 编程接口"没啥区别),套接字地址是一个描述socket地址的数据结构。
 其中描述TCP/IP协议地址(AF_INET)的结构为:
 struct sockaddr_in{
    short sin_family; //AF_INET
    u_short sin_port; //16位端口号,网络字节顺序
    struct in_addr sin_addr; //32位IP地址,网络字节顺序
    char sin_zero[8]; //保留
 }
 其他的结构还有 sockaddr_ns,sockaddr_un等,是用在其他协议地址的。
 基本上我们用不到。
 于是一个标准绑定为:
 
 bind(SOCKET sockid,struct * localaddr_name,int addrlen);
 //sockid是一个未命名套接字的socket号
 //localaddr_name是用来命名sockid的指向sockaddr_in结构的指针
 //addrlen是localaddr_name的字节长度
 
 #不好意思,讲了半天全是c,可是这些地址结构什么的不用c说不明白呀
 #天水兄你千万别怪我~~~ :$
 使用perl的bind()时先要调用
 
 inet_aton('localhost');
 
 或函数 INADDR_ANY 取得ip地址字符串,然后调用
 
 $localaddr_port = sockaddr_in($port,inet_aton('localhost'));
 #$port是端口号
 
 或者是
 
 $localaddr_port = sockaddr_in($port,INADDR_ANY);
 
 获得TCP/IP的地址,最后
 
 bind(SERVER,$localaddr_port);
 
 完成绑定!在这里不用指定$localaddr_port的字节长度,这就是perl的
 好处。
 
 bind说完了.
 (未完待续..)
 
 --什么?这就完了!?4AD,你越来越象是灌水啦!!!
 --不是故意的(头上冒汗了)。
  -- 无边无际的黑暗与冰冷,湮灭了黎明的曙光,向着你 
 扑 面 而 来! 
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.100.29.107]
  | 
 
 
 |