Internet 套接口的两种类型
什么意思?有两种 Internet 套接口?是的。不,我在撒谎。其实还有很多,但是我可不想 吓着你。我们这里只讲两种。 Except for this sentence, where I'm going to tell you that "Raw Sockets" are also very powerful and you should look them up.
好了,好了。那两种类型是什么呢?一种是 "Stream Sockets",另外一种是 "Datagram Sockets"。我们以后谈到他们的时候也会用到 "SOCK_STREAM" 和 "SOCK_DGRAM"。数据报套接口有时也叫“无连接套接口”(如果你确实要连接的时候用 connect()。)
流式套接口是可靠的双向通讯的数据流。如果你向套接口安顺序输出“1,2”,那么他们 将安顺序“1,2”到达另一边。他们也是无错误的传递的,有自己的错误控制。
有谁在使用流式套接口?你可能听说过 telnet,不是吗?他就使用流式套接口。你需要你所输入的字符按顺序到达,不是 吗?同样,WWW 浏览器使用的 HTTP 协议也使用他们。实际上,当你通过端口80 telnet 到一个 WWW 站点,然后输入 “GET pagename” 的时候,你也可以得到 HTML 的内容。
为什么流式套接口可以达到高质量的数据传输?他使用了“传输控制协议 (The Transmission Control Protocol)”,也叫 “TCP” (请参考 RFC-793 获得详细资料。)TCP 控制你的数据 按顺序到达并且没有错误。你也许听到 “TCP” 是因为听到过 “TCP/IP”。这里的 IP 是指 “Internet 协议”(请参考 RFC-791.) IP 只是处理 Internet 路由而已。
那么数据报套接口呢?为什么他叫无连接呢?为什么他是不可靠的呢?恩,有这样的事实:如果你发送一个数据报,他可能到达,他可能次序颠倒了。如果他到达,那么在这个包的内部是无错误的。
数据报也使用 IP 作路由,但是他不选择 TCP。他使用“用户数据报协议 (User Datagram Protocol)”,也叫 “UDP” (请参考 RFC-768.)
为什么他们是无连接的呢?主要原因是因为他并不象流式套接口那样维持一个连接。 你只要建立一个包,在目标信息中构造一个 IP 头,然后发出去。不需要连接。应用程序有: tftp, bootp 等等。
“够了!”你也许会想,“如果数据丢失了这些程序如何正常工作?”我的朋友,每个程序在 UDP 上有自己的协议。例如,tftp 协议每发出一个包,收到者发回一个包来说“我收到了!” (一个“命令正确应答”也叫“ACK” 包)。如果在一定时间内(例如5秒),发送方没有收到应答, 他将重新发送,直到得到 ACK。这一点在实现 SOCK_DGRAM 应用程序的时候非常重要。

Linux/Unix网络编程指南(Socket 编程)—(2)
作者:转载自:更新时间:2009-8-2
- SQLite数据库最适合做网站内容管理
- 详解有关线程组的操作示例
- 详解atoi () 函数
- 关于C与C++头文件一览
- 关于C/C++数组名与指针区别详解
- Symbian的异步框架
- 比较IronPython和C#的执行速度
- 我的Visual C++入门之路2
- 我的Visual C++入门之路1
- PHP编写的掷骰器脚本
- PHP编写的乐透机游戏脚本
- PHP编写的米德里比斯游戏脚本全过程
- PH编写的扑克牌器脚本
- PHP编写的随机名称生成器脚本
- PHP编写的场景生成器脚本
- C++ STL 算法另类使用方法
- c++教程之开发中数据结构和算法的分
- C++中禁止异常信息传递到析构函数外
- C++教程之利用非托管并列缓存
- 非对称密码算法制作共享软件的注册
- C++教程之遗传算法详解
- C++中的常规抽象详解
- C/C++程序中内存的的分配详解
- C++教程之快速计算32位数中1的位数
- Java中得抽象数据类型
- 提高编程效率的几点小技巧
- Java面向对象编程实例详解
- Java复杂数据类型用法
- C语言源代码——贪吃蛇游戏
- Visual C++源代码——俄罗斯方块程
- VC编程全过程—“幸运52”猜价格游
- VB.NET和Java得OOP设计
- Delphi编程实现3D图形修饰技术
- 一道JAVA题
- 理解端口,系统服务,系统进程概念
- C语言编程较容易易犯的错误总结
- Boost 库中的实用工具类使用入门(
- Linux/Unix网络编程指南(Socket 编
- Linux/Unix网络编程指南(Socket 编
- Linux/Unix网络编程指南(Socket 编
- Linux/Unix网络编程指南(Socket 编
- 如何编写PHP程序增加一个系统用户
- VB下如何编写CRC校验程序
- Linux/Unix网络编程指南(Socket 编
- ASP与JSP的比较
- Linux/Unix网络编程指南(Socket 编
- 算法合集
- 什么叫做状态机?
- 排序算法实现大全
- C语言常用宏定义技巧
- C语言常用排序全解
- linux内核基本数据类型总结
- 程序员数据结构笔记
- C语言难点分析整理
- C语言高效编程秘籍
- VB与VC混合编程中处理消息的方法
- boost::asio::error的用法浅析
- Boost 库中的实用工具类使用入门(
- Boost 库中的实用工具类使用入门(
- 线程同步-信号量-strand的用法总结
- Access二级视频教程
- 平面设计视频教程
- 编程开发视频教程
- 三维动画视频教程
- 网页设计视频教程
- Flash动画视频教程
- 办公软件视频教程
- 网店技巧视频教程
- 硬件技术视频教程
- 等级考试视频教程