BSD socket
来源:互联网 发布:数控编程代码案例 编辑:程序博客网 时间:2024/05/22 16:39
介绍
当你进入 UNIX 的神秘世界后,立刻会发现越来越多的东西难以 <script type="text/javascript"><!--google_ad_client = "pub-2299987709779770";google_ad_width = 300;google_ad_height = 250;google_ad_format = "300x250_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_url = "000000";google_color_text = "000000";//--></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script> 理解。对于大多数人来说,BSD socket 的概念就是其中一个。这是一个很短的教程来解释他们是什么、他们如何工作并给出一些简单的代码来解释如何使用他们。
类比 (什么是 socket ?)
socket 是进行程序间通讯(IPC)的 BSD 方法。这意味着 socket 用来让一个进程和其他的进程互通信息,就象我们用电话来和其他的人交流一样。
用电话来比喻是很恰当的,我们在后面将一直用电话这个概念来描叙 socket 。
装上你的新电话(怎样侦听?)
一个人要能够收到别人打给他的电话,首先他要装上一门电话。同样,你必须先建立 socket 以侦听线路。这个过程包含几个步骤。首先,你要建立一个新的 socket,就象先装上电话一样。socket()
命令就完成这个工作。
因为 sockets 有几种类型,你要注明你要建立什么类型的。你要做一个选择是 socket 的地址格式。如同电话有音频和脉冲两种形式一样,socket 有两个最重要的选项是 AF_UNIX 和 IAF_INET。AF_UNIX 就象 UNIX 路径名一样识别 sockets。这种形式对于在同一台机器上的 IPC 很有用。而 AF_INET 使用象 192.9.200.10 这样被点号隔开的四个十进制数字的地址格式。除了机器地址以外,还可以利用端口号来允许每台机器上的多个 AF_INET socket。我们这里将着重于 AF_INET 方式,因为他很有用并广泛使用。
另外一个你必须提供的参数是 socket 的类型。两个重要的类型是 SOCK_STREAM 和 SOCK_DGRAM。 SOCK_STREAM 表明数据象字符流一样通过 socket 。而 SOCK_DGRAM 则表明数据将是数据报(datagrams)的形式。我们将讲解 SOCK_STREAM sockets,他很常见并易于使用。
在建立 socket 后,我们就要提供 socket 侦听的地址了。就象你还要个电话号码来接电话一样。bind()
函数来处理这件事情。
SOCK_STREAM sockets 让连接请求形成一个队列。如果你忙于处理一个连接,别的连接请求将一直等待到该连接处理完毕。listen()
函数用来设置最大不被拒绝的请求数(一般为5个)。一般最好不要使用 listen()
函数。
下面的代码说明如何利用 socket()
、 bind()
和 listen()
函数建立连接并可以接受数据。
在建立完 socket 后,你要等待对该 socket 的调用了。accept()
函数为此目的而来。调用 accept()
如同在电话铃响后提起电话一样。Accept()
返回一个新的连接到调用方的 socket 。
下面的代码演示使用是个演示。
和电话不同的是,在你处理先前的连接的时候,你还可以接受调用。为此,一般用 fork 来处理每个连接。下面的代码演示如何使用 establish()
和 get_connection()
来处理多个连接。
拨号 (如何调用 socket)
现在你应该知道如何建立 socket 来接受调用了。那么如何调用呢?和电话一样,你要先有个电话。用 socket()
函数来完成这件事情,就象建立侦听的 socket 一样。
在给 socket 地址后,你可以用 connect()
函数来连接侦听的 socket 了。下面是一段代码。
这个函数返回一个可以流过数据的 socket 。
谈话(如何通过 sockets 交谈)
好了,你在要传输数据的双方建立连接了,现在该传输数据了。read()
和 write()
函数来处理吧。除了在 socket 读写和文件读写中的一个区别外,和处理一般的文件一样。区别是你一般不能得到你所要的数目的数据。所以你要一直循环到你需要的数据的到来。一个简单的例子:将一定的数据读到缓存。
相同的函数也可以写数据,留给我们的读者吧。
挂起(结束)
和你通过电话和某人交谈后一样,你要在 socket 间关闭连接。一般 close()
函数用来关闭每边的 socket 连接。如果一边的已经关闭,而另外一边却在向他写数据,则返回一个错误代码。
世界语(交流的语言很重要)
现在你可以在机器间联络了,可是要小心你所说的话。许多机器有自己的方言,如 ASCII 和 EBCDIC。更常见的问题是字节顺序问题。除非你一直传输的都是文本,否则你一定要注意这个问题。幸运的是,人们找出了解决的办法。
在很久以前,人们争论哪种顺序更“正确”。现在必要时有相应的函数来转换。其中有 htons()
、ntohs()
、htonl()
和 ntohl()
。在传输一个整型数据前,先转换一下。
在读数据后,再变回来。
如果你一直坚持这个习惯,你将比别人少出错的机会。
未来在你的掌握了(下一步?)
就用我们刚才讨论的东西,你就可以写自己的通讯程序了。和对待所有的新生事物一样, 最好还是看看别人已经做了些什么。这里有许多关于 BSD socket 的东西可以参考。
请注意,例子中没有错误检查,这在“真实”的程序中是很重要的。你应该对此充分重视。
<script type="text/javascript"><!--google_ad_client = "pub-2299987709779770";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_url = "000000";google_color_text = "000000";//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
- BSD socket
- BSD socket
- BSD Socket
- BSD Socket
- BSD Socket
- BSD Socket
- BSD socket入门
- bsd socket介绍
- 再学BSD Socket
- BSD Socket API
- iPhone: BSD Socket
- iOS BSD socket编程
- BSD socket编程
- general BSD socket
- [Socket]BSD Socket网络通信
- [Socket]BSD socket简易入门
- BSD Socket 简易入门手册
- BSD Socket 简易入门手册
- 2006年信息产业部ERP管理咨询师试题
- 易优2注册码分析和爆破
- 168教数据库中表的关系
- 2005年信息产业部ERP管理咨询师考试试题
- 关于ASP.NET在IIS一些问题的经验总结
- BSD socket
- JScript 字母顺序的关键字列表
- 走出了一步,不知道是否真的是应该的~
- ASP.NET下如何防范SQL注入式攻击
- Microsoft Windows DirectSpeechSynthesis Module MS07-033 EXPLOIT
- EXCEL怎样导入导出数据库
- BarCodeAx.dll v. 4.9 ActiveX Control Remote Stack Buffer Overflow
- PXE全自动安装FreeBSD操作实例
- MS07-034: Executing arbitrary script with mhtml: protocol handler