深入浅出理解套接字
来源:互联网 发布:mac 10.9 安装xcode 编辑:程序博客网 时间:2024/05/21 19:31
深入浅出理解套接字
套接字是实现网络通信的底层原理,理解套接字是网络编程的基础。下面,我试着用通俗的语言来描述利用套接字实现网络通信的过程,不对的地方请各位大虾指正。
首先,网络通信是谁和谁的通信呢?常见说法有两种,一是客户端和服务器端,二是主机和主机之间。这两种说法都是正确的,但是比较笼统,不利于理解网络通信本质。实际上,是一台主机上的进程和另一台主机上的进程进行的数据传输。那好,假设我们有两台主机A和B,它们通过网络连接。
现在主机A上有一个进程ProcessA,主机B上有一个进程ProcessB,ProcessA为客户端进程,ProcessB为服务器端进程。这两个进程之间如何通信呢?
很显然,要经过如下三个步骤:1,ProcessA请求连接ProcessB。
2,ProcessB接受ProcessA连接。
3,建立连接,开始通信。
看起来这三个步骤很简单,但是要在网络中实现这几步可不是一件简单的事。首先,对ProcessA来说,ProcessB的地址是什么呢?是主机B的IP地址吗?显然IP是必须要有的,但只有IP是远远不够的,为什么?因为IP地址只是唯一标示了主机,但一台主机上有很多进程,还必须明确标示出是哪个进程才行,这就要用到端口的概念。也就是说,端口是在网络通信时,标示主机上的进程的一个数字,通常为一个16位的整数。这样一来,我们用一个地址结构{IP:端口}就可以让ProcessA找到ProcessB啦。我们将这种地址结构称为套接字地址。这就解决了第一个步骤。
现在,我们假设ProcessA已经和ProcessB建立了连接。那么它们如何传送数据呢?连接建好就相当于两个进程间的管道连通了。那么,进程A可能既要往本地磁盘文件中写数据,又要给ProcessB传数据。它怎么确定数据往哪传呢,很简单,我们在ProcessA中给这个连接建一个标示符,像文件标示符一样,称之为套接字。套接字和特定的网络连接绑定。网络连接用如下数据结构标示:{IPA:端口A,IPB:端口B}。这个数据结构称为套接字地址对。现在我们知道了,套接字就是一种特殊的文件,它和套接字地址对绑定以传输数据。
回头来看第二步。ProcessB肯定也是先建立一个套接字,但是,这个套接字比较特殊,因为它不能直接和一个套接字地址对绑定。它只能先和自己的套接字地址绑定。但是这个套接字可以收到发给自己的连接请求,为什么呢?因为它已经有套接字地址了。等ProcessA发送请求连接数据过来后,连接数据中有ProcessA中的套接字的套接字地址。这样,ProcessB中的套接字就也和套接字地址对绑定了。下面,二者就可以自由通信啦!
- 深入浅出理解套接字
- 套接字理解
- 深刻理解套接字
- 如何理解套接字???
- 理解UDP套接字
- socket 套接字理解
- 理解套接字recv(),send()
- 套接字函数及其理解
- 谈套接字的理解
- linux socket套接字理解
- 理解套接字和端口
- 套接字函数及其理解
- 20、理解UDP套接字
- socket(套接字通俗易懂的理解)
- 个人对于套接字的一些理解!
- 对套接字的深入理解
- 关于对套接字的理解
- 套接字描述符的理解
- php性能测试工具--xhprof
- 配置Qt+VS2008环境
- android常用传感器
- Firebug入门指南
- 10 个免费超棒的编程用等宽字体
- 深入浅出理解套接字
- 学习笔记(2.2) android学习过程中参考的书籍或文章
- Boost库的使用总结1
- string类的方法
- html,css,javascript,jquery使用笔记
- Android屏幕旋转时Activity的生命周期
- IOS学习:UIView小记
- 笔记本建立wifi热点
- Firebug控制台详解