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